在阅读了一些像这样的东西之后:http://mikehadlow.blogspot.com/2008/09/managed-extensibility-framework-why.html
据我所知,MEF有一些我在IoC中找不到的功能,而且MEF有一些IoC的东西,可能没有其他IoC系统提供的那么高级。
我需要MEF的东西。我是否也需要一个IoC框架,或者我可以使用MEF已有的框架?
阿舍尔
发布于 2010-07-20 17:54:12
取决于您的需求/现有代码。
如果你有一个构建在IoC容器上的现有代码基础设施,你实际上可以将它们与MEF结合起来。最近我一直在构建一个ASP.NET MVC+MEF框架,我的一些读者一直在询问如何将我构建的MEF+MVC框架与Unity集成在一起。多亏了一个名为Common Services Locator的项目,这一切都变得非常简单。
CSL项目旨在提供对服务位置的抽象,因此我可以获取Unity的CSL提供者,将其与自定义ExportProvider连接起来,并自动开始组合我的IoC驱动的部分。
这是MEFs ExportProvider模型的好处之一,您可以很容易地插入任何额外的提供者,以开始从各种来源拉取出口。
上周的I blogged about combining MEF+Unity (还有另一个示例MEF+Autofac ),虽然我的示例是为ASP.NET MVC准备的,但是这个概念对于大多数其他实现都是一样的。
如果您可以选择使用MEF构建新的东西,您可能会发现您不需要IoC容器,MEF可以处理属性注入、构造函数注入、部件生命周期管理和类型解析。
如果您有任何问题,请告诉我:)
发布于 2010-07-20 18:02:39
IoC遵循一个目的。
MEF是特别好的设计,如果你想在你的系统中有一些插件。或者你不相信能正确运行的代码(别忘了处理异常)。
但是,它因此带来了额外的开销。
如果你只想做IoC,因为它是可扩展和可测试软件的一个很好的设计模式,那么我推荐AutoFac,因为它出自同一个人。或多或少:)
而且,如果你需要这两种意图。然后两者都使用。正如Matthew所指出的,您可以使用CSL来对两者进行抽象。如果需要的话。
用于插件-> MEF
对于您的IoC ->,一个简单的IoC
发布于 2010-07-20 21:54:46
我们使用MEF作为IoC容器,它正在为我们工作。
话虽如此,你应该看看Glenn Block的这篇博客文章,他列出了你可能会遇到的缺点:Should I use MEF for my general IoC needs?
https://stackoverflow.com/questions/3288558
复制相似问题