dependency-injection - 依赖注入(inject)最佳实践

标签 dependency-injection ioc-container

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

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

  • 每个应用程序或 AppDomain 使用一个内核
  • 仅将 DI 容器用于长生命周期的 Singleton 对象,将工厂(或其他方法)用于短生命周期的 transient 对象)
  • 构造函数注入(inject)优于属性或字段注入(inject)
  • 请求对象,不要构建它们
  • 其他??指向好的博客全文/文章的指针??
  • 最佳答案

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

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

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

    关于dependency-injection - 依赖注入(inject)最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1643135/

    相关文章:

    java - 解释为什么构造函数注入(inject)比其他选项更好

    c# - DbContext 没有被 autofac 注入(inject)

    dependency-injection - 为您的 IoC 提供包装器是个好主意吗?

    c# - 使用 MVC3 IDependencyResolver 从 Unity 2.0 解析命名注册

    c# - 如何在 CaSTLe 中注册一个组件,该组件将另一个组件作为代码中的参数?

    c# - StructureMap 中的命名实例和默认实例?

    c# - 简单注入(inject)器 : Different DbContext for selected controllers

    java - 静态方法或DI

    spring - 集成测试 : test the Autowired annotation

    c# - 使用 IoC 动态选择接口(interface)实现