依赖注入最佳实践

时间:2009-10-29 11:39:59

标签: dependency-injection ioc-container

我在我的代码中使用依赖注入(使用Ninject)并且认为我做得很好,直到我遇到由于误解DI容器适合代码的位置而导致的性能问题。似乎有很多关于如何使用DI框架的信息,但没有太多关于不使用它们的地方或者如何最好地使用它们(至少我能找到)

我想我会写出我认为最好的做法,看看其他人是否同意我以及人们可以提出的其他最佳做法。

  • 每个应用程序或AppDomain使用一个内核
  • 仅将DI容器用于长寿命的Singleton对象,将工厂(或其他方法)用于短暂的瞬态对象)
  • 首选构造函数注入属性或字段注入
  • 请求对象,不要构建它们
  • 他人??指向好博客的文章/文章??

2 个答案:

答案 0 :(得分:7)

以下是最重要的一点(其中一些也出现在OP中)的简短列表:

  • 代码应该不知道使用哪个DI容器(如果有的话)
  • 在应用程序的根目录中组成整个应用程序(组合根目录)
  • 支持构造函数注入

我不能说我同意你关于Singleton vs. Transient对象的观点。 DI的重点是外部机制(例如DI容器)决定任何给定依赖关系的生命周期,而不是其他人,因此您需要让所有依赖关系由DI容器管理。

答案 1 :(得分:4)

  

仅将DI容器用于长寿命的Singleton对象,将工厂(或其他方法)用于短暂的瞬态对象)

但是,确实使用DI将工厂注入需要的地方。