C# MEF-我是否需要实施iPart消息通知

C# MEF-我是否需要实施iPart消息通知,c#,configuration,build,mef,C#,Configuration,Build,Mef,我所有的“部件”都实现了这个IPlugin接口。我的零件显然有进口/出口要求/产品 我正在编写一个build+config系统,在这个系统中,用户动态地选择他/她想要的内容,这将转换为一组被调用的插件 例如,下面是一个插件列表: (1) 安装X。。。导出“XTypeInstalled” (2) 配置X。。。导入“XTypeInstalled”,导出“XTypeConfigured” (3) 安装Y。。。导入“XTypeConfigured” (4) 安装Z (5) 配置 现在,用户可以选择(1)

我所有的“部件”都实现了这个IPlugin接口。我的零件显然有进口/出口要求/产品

我正在编写一个build+config系统,在这个系统中,用户动态地选择他/她想要的内容,这将转换为一组被调用的插件

例如,下面是一个插件列表:

(1) 安装X。。。导出“XTypeInstalled”

(2) 配置X。。。导入“XTypeInstalled”,导出“XTypeConfigured”

(3) 安装Y。。。导入“XTypeConfigured”

(4) 安装Z

(5) 配置

现在,用户可以选择(1)、(3)和(4)。。。或者可以选择(1)、(2)、(3)

我面临的问题是,我所有的插件编写器现在都需要实现iPartimportsAssetFiedNotification吗?如果不是,则用户选择(1)、(2)和(3)的工作流。。。如何调用(3)的execute()方法


我说得通吗

我不确定是否要使用MEF来管理这样一个程序的运行时流。MEF是定位和加载插件的最佳选择,但它是为非常松散耦合的系统设计的,因此您可能没有所需的控制级别

例如,尽管依赖项解析过程将为任务提供它们的依赖项,但没有机会检查依赖项结构是什么

例如,当您想要保证一个任务只执行一次,或者当您想要用一个任务替换另一个任务时,事情可能会很棘手

我的建议是使用MEF查找插件,但是开发一个独立于MEF的丰富对象模型来执行插件

例如:

然后使用MEF查找所有可用插件:

[Export(typeof(IPlugin)), ExportMetadata("Name", "ConfigureX")]
public class ConfigureXPlugin : IPlugin { ...
公共类BuildRunner{
[进口数量]
惰性插件[];
void RunBuild(…){
//找出应该执行哪些任务,以何种顺序执行,并调用每个任务
希望这有帮助。如果你仍然有问题,发布更多关于你问题的信息会有所帮助


尼克

看起来你的一些问题被打断了。它以“我的问题是这个”结尾
[Export(typeof(IPlugin)), ExportMetadata("Name", "ConfigureX")]
public class ConfigureXPlugin : IPlugin { ...
public class BuildRunner {
  [ImportMany]
  Lazy<IPlugin, IPluginMetadata> plugins[];

  void RunBuild(...) {
    // Figure out which tasks should execute, in which order, and call each of them