使用MEF作为IoC容器

15

请标记一个答案,以造福社区和提高您的批准评级。 - RyBolt
5个回答

8
根据您的要求/现有代码而定。
如果您已经建立在IoC容器上的现有代码基础设施,实际上可以将它们与MEF结合使用。最近我一直在构建一个ASP.NET MVC+MEF框架,我的一些读者一直在询问如何将Unity与我构建的MEF+MVC框架集成。这非常容易实现,感谢一个名为Common Services Locator的项目。
CSL项目旨在提供对服务位置的抽象,因此我可以获取一个用于Unity的CSL提供程序,将其与自定义ExportProvider连接起来,MEF会自动开始组合我的IoC驱动部件。
这是MEF ExportProvider模型的好处之一,您可以轻松地插入任何其他提供程序,以开始从各种来源提取导出项。
上周我发表了关于结合MEF+Unity的博客(还有MEF+Autofac作为另一个例子),尽管我的示例针对ASP.NET MVC,但对于大多数其他实现,概念是相同的。
如果你有使用MEF构建新项目的选项,你可能会发现不需要IoC容器,因为MEF可以处理属性注入、构造函数注入、部件生命周期管理和类型解析。如果有任何问题,请告诉我 :)

3

IoC(控制反转)有一个目的。

MEF(Managed Extensibility Framework)特别设计用于系统中的插件或者你不信任代码能正常运行(别忘了处理异常)时使用。但是,这也意味着它会带来一些额外负担。

如果你只是想使用IoC作为可扩展和可测试软件的好设计模式,那我建议你使用AutoFac,因为它也是同一个人开发的。多多少少 :-)

而且,如果你需要同时满足两个目的,那就都用吧。正如Matthew所指出的,你可以使用CSL来抽象化两者(如果需要)。

对于插件 -> MEF

对于你的IoC -> 一个简单的IoC


3

MEF2(在.NET 4.5框架中)解决了该文章中概述的问题。 - Nate Zaugg

2

1

在最近切换到AutoFac之前,我一直在Web应用程序中使用提供程序模型来实现“IOC”。

基本上,我的要求是我需要能够“转售”应用程序,因此任何接口都需要被抽象化。使用提供程序模型会使事情变得混乱。如果您已经在使用IOC容器,则使用IOC容器更有意义,并且我仍然可以满足“转售”的要求,因为IOC容器可以“重新配置”以允许不同的实现。

如果您想要一个干净的代码库,我认为MEF是最好的解决方案,因为它具有更多的约定,因此人们可以将组件放入文件夹中而不更改任何配置即可引发更改。这很好,但对于我的场景可能过于复杂,只需简单的配置覆盖即可。

请阅读我的博客文章-希望博客也能得到一些好的评论:http://healthedev.blogspot.com/2011/12/making-custom-built-applications.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接