应该为分布式应用程序中的插件动态加载定制MEF的哪些部分

我的模拟应用程序将使用插件来提供模拟算法和数据结构,以存储模拟数据。 该应用程序由两部分组成。 首先是提供UI的主机应用程序(作为WPF UI或作为CAD应用程序的插件)。 此应用程序处理与用户的所有交互,但不执行任何模拟计算,也不存储任何模拟数据。 第二部分是执行模拟计算的数据应用程序。 数据应用程序没有任何方式让用户直接与它进行交互,所有输入都是通过与主机的连接提供的(如果两者都在同一台机器上,则通过命名管道提供,如果它们在不同的机器上,则通过TCP提供)。 该方法允许通过具有多个数据应用的单个主机进行分布式计算。

数据应用程序通过一个或多个插件提供数据存储方法,模拟算法等,以便于添加新function。 为了实现这一目标,计划是:

  • 让主机应用程序执行插件搜索。 主机应该存储描述插件及其元数据的数据,但它永远不会实例化任何插件类。 为了防止将程序集加载到主机应用程序中,需要以某种序列化格式存储插件的描述。
  • 数据集应用程序将从主机请求插件信息,确定要加载的所需插件,请求传输正确的程序集(分布式计算所必需)并加载插件。
  • 选择正确的插件应该基于Type(如在System.Type中)和其他信息,如优先级等。

为了让所有这些工作,我想我将不得不:

  • 为数据应用程序编写某种延迟加载目录(类似于Silverlight中的DeploymentCatalog)。 技巧可能只是在应用程序确定需要实例化哪些类之后才请求转移和加载程序集。
  • 为主机应用程序编写自己的程序集扫描机制,以一些序列化(字符串?)格式存储插件信息,以防止插件程序集被加载到主机应用程序中。
  • 编写某种加载机制,可以选择正确的插件类,并确定如何加载它以及提供哪些构造参数。
  • 找到一些方法允许插件指定设置值(包括默认值和所述值的本地化描述)和元数据。

我想做尽可能少的工作,所以我看了一些可用的.NET插件系统。 从它的外观来看,MEF似乎是最有希望的候选者。 我已经阅读了MEF的架构和能力,但我仍然有点不知道我应该把注意力集中在哪里。 所以我的问题是MEF的哪些部分必须定制才能使MEF与我计划的方法一起工作?

事实certificate,MEF缺少插件组件的延迟加载所需的某些位,但是可以在应用程序的插件部分中使用MEF的某些部分。

  • 通过为AppDomain.AssemblyResolve事件实现处理程序来完成组件的延迟加载。 此解析程序使用现有的通信function(主机应用程序和数据集应用程序之间进行通信所必需的)来传输所需的程序集。
  • 插件数据的扫描和序列化按照相关问题的答案中的说明实现。 该部分大量使用MEF来执行插件数据的检测和序列化。
  • 在MEF中似乎无法在不实例化对象的情况下编写部件,因此应用程序的这一部分按照此答案提供的实现方式实现