gpt4 book ai didi

c# - 应自定义 MEF 的哪些部分以在分布式应用程序中动态加载插件

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:55 24 4
gpt4 key购买 nike

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

数据应用通过一个或多个插件提供数据存储方式、模拟算法等,方便增加新的能力。为了实现这一点,计划是:

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

为了让所有这些都起作用,我想我必须:

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

我想做尽可能少的工作,所以我查看了一些适用于 .NET 的可用插件系统。从表面上看,MEF 似乎是最有前途的候选人。我已经阅读了 MEF 的架构和功能,但对于我应该将精力集中在哪里,我仍然一头雾水。所以我的问题是必须自定义 MEF 的哪些部分才能使 MEF 与我计划的方法一起工作?

最佳答案

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

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

关于c# - 应自定义 MEF 的哪些部分以在分布式应用程序中动态加载插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11951501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com