使用IoC容器进行插件架构

时间:2011-02-10 22:02:26

标签: c# .net ioc-container mef

如果我错了,请纠正我,但MEF仅适用于管理一组可以自动发现并自动连接的未知事物(插件)。对于未来的项目,我们需要一个真正的IoC容器来显式配置应用程序的已知部分(MEF并不擅长),但另外我们还需要支持自动发现的插件(如果可能的话,最好是没有属性的POCO)。 IoC容器可以轻松地/默认支持吗?如果是这样,你可以给一个 快速提示如何在Unity和StructureMap中完成此操作?这是我们目前支持的两个。我们真的希望避免依赖于IoC容器 MEF。

1 个答案:

答案 0 :(得分:8)

我认为重要的是要注意虽然MEF不是传统意义上的IoC容器,但它正在执行控制反转。事实上,我不同意这一点,并说MEF与其他任何容器都是一个IoC容器。说Unity和MEF之间的真正区别在于MEF默认支持组合而不是显式类型解析,并且在配置上键入发现。但是,正如我们在MEFContrib项目中看到的那样,完全可能让MEF更像传统的IoC容器。 MEF为模块化组件行为提供了很好的基线,采用了大量的硬嫁接,以及它的设计方式,它允许您添加更多功能。比方说假设您的现有代码库是围绕另一个IoC容器或服务定位器构建的,您可以连接ExportProvider来执行此操作,您可以将提供程序连接到服务定位器,例如{{3}项目然后插入兼容的CSL实现,并使用从您的其他IoC容器派生的类型组成MEF组件。 MEF还为您执行依赖注入。

如果您想避免依赖于特定的IoC容器或MEF本身,您可以使用类似于公共服务定位器的东西,这是对常见容器操作的抽象。这样,如果你需要/想要改变所有东西的连接方式,那就相对轻松了。大多数IoC容器和MEF都有兼容的CSL实现。

希望有所帮助。