关于DI和IoC容器的问题

时间:2011-04-06 16:52:02

标签: c# .net ioc-container

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

2 个答案:

答案 0 :(得分:2)

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

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

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

Ninject Sample

Wiki Article

And some site called "stack overflow"

答案 1 :(得分:0)

在最简单的方法中,绑定(容器配置)需要知道所有引用的类,并且在大多数情况下就足够了。

如果不是你的情况,一些IoC容器可以有多个绑定/配置。在StructureMap中,绑定称为Registry,您可以指定包含多个注册表,甚至可以扫描指定目录中的库以动态包含所有注册表。我记得NInject也提供了从多个地方配置内核的可能性。

我相信在这里使用MEF不会更好。您还必须共享项目之间的通用接口。当你无法在设计时组成系统时,MEF用于运行时可组合性,如果我理解正确的话,这不是这里的情况。