asp.net上的MEF可以用于依赖注入吗?

时间:2011-02-25 23:04:42

标签: c# asp.net-mvc dependency-injection mef

我知道理论上依赖注入是什么,但我还没有在我的任何项目中实际使用过依赖注入。所以请考虑我成为DI noob。

直截了当的问题是; MEF可以用于依赖注入吗?

如果可以,我的后续问题是; 使用MEF进行依赖注入是一个好主意吗?

我理解我的跟进问题可能被视为主观问题。但是,我正在寻找支持和反对的最佳做法和理由。所以,我希望我的跟进问题不会出现过多的问题。

所有这些的背景是我觉得有点迷失试图弄清楚如何为asp.net mvc制作一个插件框架。

3 个答案:

答案 0 :(得分:8)

正如我在my book 中解释的那样,MEF可以用作DI容器,但在目前的版本中,不是特别适合完成任务。

MEF旨在解决可扩展性方案,虽然它具有许多重叠功能,但在配置和生命周期管理方面却非常有限。

答案 1 :(得分:1)

我相信,MEF可以用于依赖注入;至少我目前在我自己的小型家庭WPF项目中使用它。我怀疑当你需要为应用程序的不同部署注入不同类型的接口时,如果你需要这个,可能会变得混乱。需要付出一些努力才能将正确的类添加到目录中。

在我工作的地方,使用ASP.NET MVC2,我们使用Castle Windsor进行依赖注入。然后我们使用XML配置来初始化容器。这意味着我们可以为接口注入不同类型而无需重建。

我相信.NET为MEF提供了另一种选择,同样称为MAF。它应该更复杂,但提供更多的控制。但我对此一无所知。

(我不是很有经验(1年就业),所以如果有人不同意我的意见,他们可能更正确)

答案 2 :(得分:1)

Glenn Block(MEF的前产品经理)在blog post中回答了这个FAQ。

MEFContrib已经解决了他在帖子中提到的MEF的大多数缺点:它包含额外的目录和导出提供程序实现,以增加对POCO,开放式泛型和拦截的支持。

更新:最近发布的MEF2 Preview3添加了对开放式泛型和attribute-less registration开箱即用的支持。预览版的API不是最终的,但这很好地表明这些功能将出现在下一个(> v4.0).NET版本中。