依赖注入最佳实践

Jef*_*ron 8 dependency-injection ioc-container

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

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

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

Mar*_*ann 7

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

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

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

  • 我同意瞬态对象 - 大多数使用DI的应用程序会创建大量的瞬态对象.一些容器(Unity和很快Autofac 2)默认为瞬态而不是Singleton.我不认为"喜欢单身人士"可以被视为最佳实践 - 它似乎更像是对特定情景中特定容器的性能的评论. (2认同)