2011-04-06 115 views
2

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

回答

2

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

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

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

Ninject Sample

Wiki Article

And some site called "stack overflow"

0

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

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

在这里我相信使用MEF并不会更好。您也必须共享项目之间的通用界面。而MEF是为了运行时的可组合性,当你不能在设计时组成系统的时候,如果我理解正确,这里就不是这种情况。