MEF - 多次使用相同的插件

时间:2011-03-21 18:38:52

标签: c# mef

我在Codeplex上阅读了MEF文档,我正试图弄清楚如何完成任务:

我想构建一个应用程序框架,其中包含可用于执行某些常见工作的标准组件(如显示数据库中的记录列表)。每次插件应重复使用多次,配置不同。 (例如,我在一个应用程序中有5个窗口,我显示记录列表,每个窗口都有不同类型的实体,不同的列,每个应该有自己的扩展点,比如显示记录详细信息,应该满足另一个常见的不同副本插件)。

MEF适合这种情况吗?我应该如何定义合同?我应该使用元数据吗?我可以使用配置文件定义关系吗?

1 个答案:

答案 0 :(得分:2)

是的,您可以使用MEF。 MEF使用PartCreationPolicy属性支持对象的NonShared实例化:

[PartCreationPolicy(CreationPolicy.NonShared)]

有关此here的更多信息。

我个人在目标上导入组件后进行接线和配置。但是我不确定你希望你的应用程序有多通用,如果你正在制作一个“框架”来做某些解决方案我可以想象你希望配置是分开的。您可以全面了解并制作一个ISuperDuperGridConfiguration,并在网格插件的构造函数[ImportingConstructor]中导入它们。从目标内部(网格导入的位置)将网格的位置设置为网格插件(如主网格,侧网格),并使用存储在ISuperDuperGridConfiguration中的数据进一步配置网格插件本身。

但是,根据您的目标,您可以轻松地与MEF“走得太远”。我们有一个完全MEF组件化的UI,用于满足每个客户的定制需求的应用程序。有时我会强烈要求在MEF扩展名中放置功能区中的单个按钮。

正如您所看到的,根据您的需求,您可以而且有时会走得太远。

我认为您不需要元数据,特别是在您的情况下,但也许其他人可以就此分享不同意见; - )。

我希望这可以回答你的问题,如果没有,请发表评论,以便我可以突出更多方面。总而言之,使用MEF对我们来说非常积极,我们使用它远远超出了“你好世界”这么说。所以至少你有这个!