帮助开始使用MEF

时间:2010-05-24 17:29:12

标签: dependency-injection mef

我正在读某个地方用MEF我可以简单地将一个dll放入一个目录中,我的应用程序(带有一些MEF魔法)将能够读取它并执行其中的代码? 希望只有实现我定义的接口的类?

有人可以帮助我开始,有些链接可能是我的问题。

我查看了一些文档,但似乎没有什么似乎是我所追求的,当我不确切知道要搜索什么时它很棘手......

THX 小号

5 个答案:

答案 0 :(得分:6)

以下是Brad Abrams的两篇MEF“入门”帖子:

请注意,这些是使用MEF的预览版本编写的,因此有一些更改。例如,AttributedAssemblyCatalog已重命名为AssemblyCatalog,AggregatingComposablePartCatalog现在为AggregatingCatalog,Silverlight上的PackageCatalog现在为DeploymentCatalog,并且还进行了一些其他API更改。

答案 1 :(得分:3)

答案 2 :(得分:2)

您可以通过标记导入来支持“重组”:

[ImportMany(AllowRecomposition=true)]
public IMessageSender[] Senders { get; set; }

但是,据我所知,这不会自动加载程序集。进入.NET 4的MEF版本(我猜测复杂的预览版9)似乎不会自动加载程序集。我不确定这种行为是否随着MEF的发展而改变。

您需要添加FileSystemWatcher并调用Refresh(),例如DirectoryCatalog,并监听一个或多个这些事件:

catalog.Changed += new EventHandler<ComposablePartCatalogChangeEventArgs>(Catalog_Changed);
container.ExportsChanged += new EventHandler<ExportsChangeEventArgs>(Container_ExportsChanged);
directoryCat.Changed += new EventHandler<ComposablePartCatalogChangeEventArgs>(dCat_Changed);

答案 3 :(得分:1)

这是使用WPF,MVVM和MEF构建的demo application(用于组合和可扩展性)。

答案 4 :(得分:1)

This article 提供了一种与MEF合作的简单通用方法:

  1. (通常)使用MEF的最简单方法。
  2. 如何使用MEF完全懒惰也用于Dll加载过程。