8

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

我想我会写出我认为的一些最佳实践,看看其他人是否同意我的观点,以及人们可以提出哪些其他最佳实践。

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

2 回答 2

7

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

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

我不能说我同意你关于单例与瞬态对象的观点。DI 的全部意义在于外部机制(例如 DI 容器)决定了任何给定依赖项的生命周期,而不是其他人,因此您需要让所有依赖项都由 DI 容器管理。

于 2009-10-29T11:48:00.397 回答
4

仅对长寿命的单例对象使用 DI 容器,对短寿命的瞬态对象使用工厂(或其他方法)

但是一定要使用 DI 将工厂注入到需要的地方。

于 2009-11-03T01:56:38.513 回答