依赖注入实现

时间:2014-07-09 17:35:03

标签: c# architecture dependency-injection

我的解决方案中有三个层,Presentation(winforms项目),Domain(类lib)和Persistence(类lib)。 我试图实现依赖注入来解耦它们。 我的应用程序根目录在我的表示层中。 我理解DI容器(在这种情况下是统一)应该被引用的唯一一次是在我的应用程序根目录中,否则我只是简单地用依赖于我的DI容器的地方替换类依赖关系(我认为它仍然稍微好一点) )。

因此,考虑到这些基础概念,我真的在努力实现具体的实现。也许我的应用程序根应该在它自己的单独项目中 - 也许是一个控制台应用程序。然后,我可以解决第一个“整体应用程序”问题。类,在其构造函数中列出IPresentation,IDomain和IPersistence。我理解(假设实际的实现已经注册),统一框架将递归地解决所有相应的子依赖。

根据您的经验 - 您是否能够建议这是否合理。我真的理解解耦的概念和重要性,以及如何通过DI在高层次上解决这个问题,但是我很难将它们整合在一个具有多个层的实际应用程序解决方案中(在VS中作为单独的项目组织)。 / p>

非常感谢任何有关正确实施示例的帮助或指示。

1 个答案:

答案 0 :(得分:0)

希望他们帮助你的一些想法。

在整个问题中,您可以发表以下声明:

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

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

IoC容器用于删除由现有DI结构产生的样板代码。因此我建议你在没有Unity / first /的情况下进行重构。然后返回并添加Unity以减少您的代码。

这样:
-1。通过手动Ctor,属性,方法,服务定位器注入方法制作应用程序Di. -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会把车推到马前,可以这么说。