何时使用 IOC 容器?

2024-04-08

我试图了解何时应该使用容器而不是手动注入依赖项。如果我有一个使用 1-2 个接口的应用程序,并且每个接口只有 1-2 个具体实现,我会倾向于自己处理。

如果我有一个使用 2-3 个接口的小型应用程序,并且每个接口有 2-3 个具体实现,我应该使用成熟的容器吗?会一些简单的事情吗this http://ayende.com/Blog/archive/2007/10/20/Building-an-IoC-container-in-15-lines-of-code.aspx够了吗?

基本上我试图了解何时适合手动处理这些依赖项,何时(或是否)我应该使用像上面这样简单的东西,以及何时使用像 Ninject、Windsor 等这样的 IOC 容器......它可能不会给这样的东西加上一个数字是合适的,但是我怎么知道是时候使用 IOC 容器了呢?


这里要认识到的重要一点是,您可以(并且应该)在DI 友好,但与容器无关 https://stackoverflow.com/questions/2045904/dependency-inject-di-friendly-library/2047657#2047657 manner.

这意味着您应该始终将依赖项的组合推到无法再推迟的程度。这被称为成分根 https://stackoverflow.com/questions/1475575/where-should-i-do-dependency-injection-with-ninject-2/1475861#1475861通常放置在应用程序的入口点附近。

如果您以这种方式设计应用程序,那么您对 ​​DI 容器(或无 DI 容器)的选择将围绕应用程序中的单个位置进行,并且您可以快速更改策略。

您可以选择使用穷人的DI如果您只有几个依赖项,或者您可以选择使用成熟的DI容器。以这种方式使用,您将不依赖于任何特定的 DI 容器,因此选择变为不太重要在可维护性方面。

DI 容器可帮助您管理复杂性,包括对象生命周期。像这里描述的那样使用,它不会做任何你无法手写的事情,但它可以做到更好更简洁。因此,我何时开始使用 DI 容器的门槛非常低。

一旦我克服了一些依赖关系,我就会开始使用 DI 容器。无论如何,他们中的大多数都很容易上手 https://stackoverflow.com/questions/2515124/whats-the-simplest-ioc-container-for-c/2515178#2515178.


更新:我的2012年11月回答这个问题 http://blog.ploeh.dk/2012/11/06/WhentouseaDIContainer.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时使用 IOC 容器? 的相关文章

  • 龙目岛和吉斯注射液

    我是 lombok 和 guice 注入的新手 我可以了解一般概念 但我遇到了一些我不理解的代码 并且由于语法而无法搜索 以下是代码 有人可以帮助我理解吗 import com google inject Inject import lom
  • 什么是依赖注入的 Pythonic 方式?

    介绍 对于 Java 依赖注入作为纯 OOP 工作 即您提供要实现的接口 并在框架代码中接受实现定义的接口的类的实例 现在对于 Python 您可以执行相同的操作 但我认为该方法对于 Python 而言开销太大 那么如何以 Pythonic
  • 如何在我的类型类中访问我的服务(DependencyInjection)?

    我创建了一个服务 DependencyInjection 并在控制器上将其用作 this gt get service name gt someMethod 我想知道如何在我的表单类上使用它 这是我的课程示例形式 namespace Com
  • Spring - 使用 new 是一种不好的做法吗?

    正在创建对象by hand 即使用new操作员而不是注册Springbean 和使用依赖注入被认为是不好的做法吗 我的意思是 确实Spring IoC容器必须了解应用程序中的所有对象吗 如果是这样 为什么 你希望 Spring 创建 bea
  • 哪些 .NET 依赖注入框架值得研究? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Spring部署期间依赖注入问题

    我正在启动一个 Primefaces Spring Hibernate 项目 并且仍在学习如何正确处理这些组件 但就在此时 我面临着一个与 spring 依赖注入相关的问题 这让我很害怕 我已经在网上寻找答案两天了 但找不到我的代码有什么问
  • 如何在控制器外部访问RequestContext?

    背景 我正在尝试将业务逻辑从控制器移至它们自己的服务中 控制器 public class AccountController Controller private readonly IAccountService accountServic
  • 如何将温莎城堡与 ASP.Net Web 表单一起使用?

    我正在尝试将 Windsor 的依赖注入连接到标准的 asp net Web 表单 我想我已经使用 HttpModule 和 CustomAttribute 代码如下所示 实现了这一点 尽管该解决方案似乎有点笨拙 并且想知道 Windsor
  • 无法使用 Hilt 注入 workmanager 构造函数

    我正在开发一个 Android 应用程序 我尝试将 hilt 与 workmanager 构造函数一起使用 但它不起作用并给出了此错误 2020 08 18 19 01 09 989 18125 18759 com E WM WorkerF
  • 枚举由 Autofac 生命周期跟踪的一次性物品

    Autofac 使用生命周期范围作为处理工作单元期间创建的所有组件的一种方式 虽然这是一个强大的功能 但很容易编写不能正确处理生命周期范围的代码 这会导致跟踪的一次性数量随着时间的推移而增长 实际上是内存泄漏 有没有办法监控生命周期范围在任
  • 将 Mockito 模拟注入 Spring bean

    我想将 Mockito 模拟对象注入到 Spring 3 bean 中 以便使用 JUnit 进行单元测试 我的 bean 依赖项当前是通过使用注入的 Autowired私有成员字段上的注释 我考虑过使用ReflectionTestUtil
  • Symfony 4.1 组件 - 依赖注入问题

    我正在用 PHP 重构旧应用程序 我正在尝试使用 Symfony 依赖注入组件将服务注入控制器 或其他服务 但我不知道如何实现这一点 因为 symphony 文档比框架组件更适合使用框架 我已经有了自己的内核 包含所有服务和控制器的容器 控
  • Windows 8 Metro 应用程序的依赖注入框架

    我似乎找不到 Windows 8 Metro 应用程序的依赖注入框架 win8 Metro应用程序有框架吗 Ninject 尚不支持 win8 Metro 那么有人有建议吗 城堡 春天 你可以尝试Unity 3 0 for NET4 5 预
  • Castle Windsor - 如何根据构造函数参数解析组件

    假设我有一个这样的组件 public class MyComponent public MyComponent string name 我基本上希望在解析它时将提供的构造函数参数作为组件标识符的一部分 如果您从未使用该组参数解决它 它将实例
  • DI:IDisposable 对象的处理寿命

    所以我正在开发我的 DI IoC 容器OpenNETCF IoC http ioc codeplex com我有一个 合理的 功能请求 为容器集合中的 IDisposable 项目添加某种形式的生命周期管理 我目前的想法是 由于我无法查询对
  • 如何在 inversify 中注入异步依赖?

    我有 TypeScript 应用程序并且正在使用反转 http inversify io 对于国际奥委会 我有一个连接类 use strict import injectable from inversify import createCo
  • MVC和依赖注入,被迫使用单例Controller?

    我正在致力于构建一个根据 MVC 原则运行并利用依赖注入的 PHP 框架 我想我已经把前端控制器部分放下了 有一个工作路由器实例化控制器实例并根据请求的 URI 调用适当的操作 接下来是依赖注入 我想实现一个使用反射解决依赖关系的容器 这样
  • Dagger2 - 项目重建错误 - 字段注入 - Android

    我一直在尝试实现 Dagger2 Problem 当我使用构造函数注入时 它工作正常 但是当我使用字段注入时 它会抛出如下错误 Error 6 48 error cannot find symbol class DaggerApplicat
  • Autofac 无法解析构造函数的参数“System.String applicationClientId”

    我有以下类 接口结构 class ProviderSetting public delegate ProviderSetting Factory string applicationClientId string appKey public
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造

随机推荐