依赖注入实现

本文关键字:实现 注入 依赖 | 更新日期: 2023-09-27 18:12:23

我的解决方案中有三层,表示(winforms项目),域(类库)和持久性(类库)。我正试图实现依赖注入来解耦它们。我的应用程序根在我的表示层。我明白DI容器(在这种情况下是unity)应该被引用的唯一时间是在我的应用程序根中,否则我将简单地用对我的DI容器的依赖来替换所有的类依赖(我认为这仍然稍微好一点)。

因此,有了这些基本概念,我真的在为具体的实现而挣扎。也许我的应用程序根应该在它自己的独立项目中——也许是一个控制台应用程序。然后,我可以解析第一个"overallApplication"类,在其构造函数中列出IPresentation、iddomain和IPersistence。我理解(假设实际实现已经注册),统一框架将递归地解决所有各自的子依赖项。

以你的经验,你能建议这是一个合理的方法吗?我真的理解解耦的概念和重要性,以及如何在高层次上通过DI概念来解决这个问题,但我正在努力将它与一个真正的多层应用程序解决方案(在VS中组织为单独的项目)联系在一起。

任何帮助或指针对正确实现的例子将非常感激。

依赖注入实现

给你一些想法,希望对你有所帮助。

在你的问题中,你要做这样的陈述:

"我真的理解解耦的概念和重要性,以及DI是如何解决这个问题的……"

我要评估的第一件事是对DI = IoC容器(例如Unity)的理解。

IoC容器用于删除来自现有DI结构的样板代码。因此,我建议你在没有Unity的情况下进行重构。然后回去添加Unity来减少你的代码。

:
1。通过手动的tor, Property, Method, Service Locator注入方法来创建应用。
2。设置完成后,您应该看到如下内容:

public View() {
  var controller = new Controller(new IView(), new model(), new IService(new Dal(ISession(connectionString))), new , new ILogger(), etc.){}
}

3。然后,一旦你的代码中有了这样的东西,你就可以使用Unity注入所有的乐趣:

public View() {}
Controller Controller {get;set;}  //<- Unity auto builds & populates this for you with all the "new" items normally found in your constructor (or wherever).

虽然不是一个产品示例,但它应该给出一些重构步骤的概念。直接使用Unity,可以说是本末倒置。