【问题标题】:MEF for dynamic load of process definitionsMEF 用于流程定义的动态加载
【发布时间】:2012-06-13 11:59:26
【问题描述】:

MEF 用于动态加载流程定义

我们的应用程序由几个部分组成:

  • ModelBuilder:允许构建 ProcessDefinition(活动、网关、事件等)和任务的域模型。
  • 具体的 ProcessDefinitions:解决特定业务的 ProcessDefinitions 的集合。每个程序集都包含一组具体的 ProcessDefinitions、Tasks 等。
  • 运行时:我们希望它动态加载包含 Concrete ProcessDefinitions 的程序集,并能够通过一个简单的服务 FindProcessDefinition(proceedingId,versionPolicy) 找到它们,该服务将查看所有 Concrete ProcessDefinition 部分。 ProcessDefinition 必须被缓存/单例。

您认为 MEF 可以解决这个问题吗?我见过 MEF 的示例,但它们用于实现接口,而不是用于这种“构建”模式。

任何提示如何做到这一点?还有其他选择吗?谢谢。

【问题讨论】:

    标签: c# mef extensibility


    【解决方案1】:

    如果您的具体流程定义和实例化这些类的构建器没有通用接口,那么 MEF 似乎不是正确的工具 (imo)。

    也许您可以让每个构建器实现一个通用接口。但是每个具体的流程定义也需要一个公共接口。情况似乎并非如此。在你的代码中你不这样做:

    new ConcreteProcessDefinition1.run() 
    

    new ConcreteProcessDefinition2.run(), 
    

    在您的代码中,您可以执行类似的操作

    ConcreteProcessDefinition1.doXYZ(input1, input2)
    

    ConcreteProcessDefinition2.doSomethingTotallyDifferent(input3)
    

    为什么需要动态加载流程定义?您的客户(无法访问您的源代码)会创建流程定义吗?

    【讨论】:

    • ConcreteProcessDefinition : IProcessDefinition,它们有一个共同的接口。构建器仅用于创建 ConcreteProcessDefinitions,因此为其创建接口不会有问题。
    • 关于最后一个问题,为什么。为了简化,我没有提到我们有一个图形工具,它允许我们绘制转换为 Builder 语义的过程定义。我们的计划是在运行时加载的 dll 中提供这些定义。
    猜你喜欢
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2014-05-21
    • 2011-11-22
    • 1970-01-01
    相关资源
    最近更新 更多