我有一个相对基本的问题,但实际上只需要一些清晰度,我一直在使用Prism(复合应用指南)在C#中创建一个WPF MVVM桌面应用程序,这一点我都清楚(或者我我同时开始使用MEF并意识到两者之间存在一种灰色区域(我已经发现并阅读了许多关于托管MEF扩展的文章/博客) IoC容器等。
然而......最近我开始关注企业图书馆5,这是什么导致我的困惑。它们在哪里组合在一起?所以Prism使用DI和基于模块的架构...... EntLib使用Di和应用程序块类型架构...... MEF根本不使用DI?这是否意味着EntLib和Prism是完全独立的架构方法,或者一个是另一个的子集? MEF也可以和/两者一起使用吗?
任何解释都是最受欢迎的。
非常感谢
答案 0 :(得分:10)
我也对IoC和MEF之间的区别感到困惑。我发现描述它们的最简单方法是:
MEF用于发现和实例化您不了解的内容。
IoC用于请求你知道的事情。
一点背景。 MEF将始终实例化您至少请求一次的导入。您无法自己创建它,并将其放入准备使用的目录中。 MEF负责创建和满足进口。动态加载的DLL,你不知道哪些DLL到达,是一个很好的例子。
另一方面,IoC - 您从当前库请求实现,并且您将获得一个实现。但您也有责任确保实施存在。
IoC用于依赖注入。 MEF是为了可扩展性。
答案 1 :(得分:3)
看看这两篇文章:
对于Enterprise Library,在v5.0中,我们已经容器无关。尽管Enterprise Library提供了开箱即用的Unity容器,但它的架构可以与您选择的任何容器或MEF一起使用。您需要提供适当的配置程序(请参阅此summary末尾的配置程序信息)