ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-MEF-我需要实现IPartImportsSatisfiedNotification吗

2019-11-07 03:18:31  阅读:222  来源: 互联网

标签:build configuration mef c


public interface IPlugin
{
    public bool execute();
}

我所有的“零件”都实现了此IPlugin接口.我的零件显然具有导入/导出要求/报价.

我正在编写一个构建配置系统,用户可以在其中动态选择他/她想要的内容,这将转换为一组被调用的插件.

例如,这是插件列表:

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

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

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

(4)安装Z

(5)配置A

现在,用户可以选择(1),(3)和(4)…,也可以选择(1),(2),(3)

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

我说得通吗?

解决方法:

我不确定要使用MEF来管理此类程序的运行时流程. MEF是查找和加载插件的绝佳选择,但它是为非常松耦合的系统设计的,因此您可能没有所需的控制级别.

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

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

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

例如.:

[Export(typeof(IPlugin)), ExportMetadata("Name", "ConfigureX")]
public class ConfigureXPlugin : IPlugin { ...

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

public class BuildRunner {
  [ImportMany]
  Lazy<IPlugin, IPluginMetadata> plugins[];

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

希望这可以帮助.如果您仍然遇到问题,请发布有关您的问题的更多信息会有所帮助.

缺口

标签:build,configuration,mef,c
来源: https://codeday.me/bug/20191107/2003006.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有