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

C# 关于DI和IoC容器的一个问题,c#,.net,ioc-container,C#,.net,Ioc Container,我不熟悉DI和IoC模式。我正在做一个新项目,希望最大限度地释放我的对象。在解决方案中,我的类被分成几个项目。所以我下载了NInject并在某个地方读到,我应该在应用程序启动(Main function或Global.asax)中创建绑定。有一件事我不明白,在这种情况下,我必须引用那些包含类的程序集来创建绑定,这意味着这些类与我创建绑定的对象耦合。是这样吗?这是否意味着使用MEF是一个更好的主意?任何人都可以解释国际奥委会是如何运作的,为什么使用它是个好主意? 感谢控制反转并不是没有对程序集的引

我不熟悉DI和IoC模式。我正在做一个新项目,希望最大限度地释放我的对象。在解决方案中,我的类被分成几个项目。所以我下载了NInject并在某个地方读到,我应该在应用程序启动(Main function或Global.asax)中创建绑定。有一件事我不明白,在这种情况下,我必须引用那些包含类的程序集来创建绑定,这意味着这些类与我创建绑定的对象耦合。是这样吗?这是否意味着使用MEF是一个更好的主意?任何人都可以解释国际奥委会是如何运作的,为什么使用它是个好主意?
感谢

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

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

有很多很好的资源可以用来了解更多关于IOC/DI模式的信息。这里有几个:


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

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

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