c# - 关于 DI 和 IoC 容器的一个问题

标签 c# .net ioc-container

我是 DI 和 IoC 模式的新手。我正在从事一个新项目,并希望最大限度地松耦合我的对象。我的类(class)分为解决方案中的几个项目。所以我下载了 NInject 并在某处读到我应该在应用程序启动时创建绑定(bind)(Main 函数或 Global.asax)。我不明白的一件事是,在那种情况下,我将不得不引用那些包含类的程序集来创建绑定(bind),这意味着类与我在其中创建绑定(bind)的对象耦合。是对的吗?这是否意味着使用 MEF 是更好的主意?任何人都可以解释 IoC 是如何工作的以及为什么使用它是个好主意? 谢谢

最佳答案

控制反转并不是没有对程序集的引用,它更多的是在您的逻辑和相关服务之间创建契约。它通过在使用服务时抽象出服务的具体实例来促进可测试性和可重用性。

例如,这允许您传入一个不同的数据服务,该服务会将您的数据保存到内存表而不是数据库中,这意味着您不会在单元测试期间将数据保存到数据库中。执行工作的函数不关心传入的内容,因为无论传递什么,它都实现了一个通用接口(interface),您可以根据该接口(interface)执行函数,并合理假设它们会起作用。

有很多很好的资源可用于了解有关 IOC/DI 模式的更多信息。这是一对夫妇:

Ninject Sample

Wiki Article

And some site called "stack overflow"

关于c# - 关于 DI 和 IoC 容器的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5570065/

相关文章:

c# - 如何在 C# 中生成字母数字优惠券代码?

c# - 在 ASP.NET Core 中全局添加 "Produces"过滤器

.net - 在 VS 2015 社区版中将 .Net 框架从 4.5.2 更改为 4.5 时出现编译错误

dependency-injection - 统一2.0 : How to create child containers on CTor injection?

c# - 是否可以在不引用容器的情况下解决类库内部的依赖关系?

c# - 具有静态和动态依赖关系的 IoC

c# - 如何根据图像的不同位置做不同的 Action (传统外观的电子书)

c# - 处理 FileStream 不会结束异步读取

.net - 关闭 TcpListener 和 TcpClient 连接的正确顺序(哪一侧应该是主动关闭)

c# - 标签和文本框 : same font looks different