阅读了一些相关的文章,比如这篇:http://mikehadlow.blogspot.com/2008/09/managed-extensibility-framework-why.html
我理解MEF有一些特性,在IoC中找不到,并且MEF也有一些IoC的东西,可能没有其他一些IoC系统提供的那么高级。
我需要MEF的东西。我是否还需要IoC框架,或者仅使用MEF就可以了呢?
Asher
阅读了一些相关的文章,比如这篇:http://mikehadlow.blogspot.com/2008/09/managed-extensibility-framework-why.html
我理解MEF有一些特性,在IoC中找不到,并且MEF也有一些IoC的东西,可能没有其他一些IoC系统提供的那么高级。
我需要MEF的东西。我是否还需要IoC框架,或者仅使用MEF就可以了呢?
Asher
IoC(控制反转)有一个目的。
MEF(Managed Extensibility Framework)特别设计用于系统中的插件或者你不信任代码能正常运行(别忘了处理异常)时使用。但是,这也意味着它会带来一些额外负担。
如果你只是想使用IoC作为可扩展和可测试软件的好设计模式,那我建议你使用AutoFac,因为它也是同一个人开发的。多多少少 :-)
而且,如果你需要同时满足两个目的,那就都用吧。正如Matthew所指出的,你可以使用CSL来抽象化两者(如果需要)。
对于插件 -> MEF
对于你的IoC -> 一个简单的IoC
我在SoapBox Core中使用MEF进行可扩展性和IoC。 CodeProject上还有一篇文章,名为使用MEF、WPF和MVVM构建可扩展应用程序,描述了它的工作原理。
在最近切换到AutoFac之前,我一直在Web应用程序中使用提供程序模型来实现“IOC”。
基本上,我的要求是我需要能够“转售”应用程序,因此任何接口都需要被抽象化。使用提供程序模型会使事情变得混乱。如果您已经在使用IOC容器,则使用IOC容器更有意义,并且我仍然可以满足“转售”的要求,因为IOC容器可以“重新配置”以允许不同的实现。
如果您想要一个干净的代码库,我认为MEF是最好的解决方案,因为它具有更多的约定,因此人们可以将组件放入文件夹中而不更改任何配置即可引发更改。这很好,但对于我的场景可能过于复杂,只需简单的配置覆盖即可。
请阅读我的博客文章-希望博客也能得到一些好的评论:http://healthedev.blogspot.com/2011/12/making-custom-built-applications.html