MEF最佳实践:在应用程序中我在哪里创建容器以及在哪里调用Compose()?

Ali*_*tad 3 .net c# mef

我已经决定使用MEF作为我拥有的插件模式,并且发现MEF易于拾取而且根本没有侵入性.我查看了样品,发现它们非常容易使用.

然而,一旦开始实施,我开始苦苦于构图.假设我有一个属于其中[ImportMany]一个属性的类.我看到的所有例子中,他们在具有导入的类中创建了Container(让我们称之为可组合的),并且基本上该类组成了自己.对于一个例子来说这可能是好的,但是确定地知道插件如何被填充对于组合物来说知道太多了.

我可以愉快地创建一个单例容器并在我的可编组中访问它,但是另外,composable必须显式调用Compose()自己,我不满意,因为它就像一个依赖注入场景,类主动调用Resolve()容器.所以,我并不想用它只是服务地点.

为了使事情变得更糟,我也使用温莎城堡进行DI,我不确定MEF和Windsor如何一起工作.

我真的环顾四周,无法找到任何有关如何正确做MEF的指导和示例.现在可能是我没有环顾四周或者我不太了解MEF(这是真的)但是会从实际在现实世界中使用它的经验中重视你的观点.

Xaq*_*ron 5

不要那样做.我用MEF了上一个项目,我希望不这样做.

背后有一个好主意(组合),我多年来一直在手动做.我很高兴.NET 4.0中的第一个正式版本,但仍然存在很多设计问题.

不幸的是,将测试和错误发现留给最终用户并反馈来之不易的错误和建议是微软政策的一部分.

MEF如果你按照例子的方式使用,那就好了.一旦你需要一点改变,你会发现没有足够的文档,没有人会回答你.以下是我从未解决过的一些问题,MEF您可以在codeplex.com中找到我的问题,开发团队从未回答过这些问题:

1)如何将参数传递给零件的构造函数(他们可能会说ExportFactory在codeplex版本中使用的是使用但是我浪费了很长时间,我可以说没有可接受的解决方案)

2)如何设置零件配置?(我最终通过一种不好的方法将配置传递给零件,但最好的可用)

3)MEF非常慢,因为它在引擎盖下使用反射.对于我的情况,加载1,000个零件需要60秒.

4)调试很棒.你得到的消息不清楚.您将最终从codeplex下载完整的源代码并在代码中搜索您的异常.

毕竟我认为如果你有其他选择,让我们MEF成熟并使用下一个版本.

我只是分享了自己的经验.