使用父app注册插件功能的最佳方式

时间:2012-01-03 01:10:16

标签: .net plugins architecture

情景如下......

主应用程序支持许多并行任务,每个任务都可以长时间运行,并且可能需要随时获取用户输入(抓取焦点)。

已知/支持的任务将由插件提供。

我目前设想的是:

应用公开:实现SearchWeb的{​​{1}}和MonitorServer(实际上是摘要) 用户选择ITask会导致MonitorServer的新实例欢迎致电MonitorServer。他们开了另一个,我们打电话给MS1

现在......出于UI原因,只有一个活动任务可以“聚焦” - 类似于多个打开的窗口,只有一个可以在顶部。

所以......我需要的是插件公开它们支持哪些任务的方式,以及当用户选择给定任务时,实例化具体并监视它的状态。另外,我需要插件才能打开主应用程序知道的窗口......例如,我可以从主UI发出“关闭所有窗口”。

我知道如何使用反射来扫描实现给定接口(MS2)的所有程序集,我可以将它们全部加载到一个单独的应用程序域中,这样我就可以重新加载插件,如果有什么东西死了(有没有人)知道有没有任何理由没有每个具体任务的应用程序域?这将允许任何单个任务死亡而不影响其余任务)

虽然插件目前全部由我们提供,但我们期待未来的第三方,所以我需要确保它能够处理粗糙/写得不好的插件。

背景:我有Unity构建对象树,因此实例化不是问题 - 更多的是如何注册功能的问题。

ITask应该是:

ITask

(每次重新初始化容器时都会调用) 或许:

Sub RegisterTasks(Container as IContainerWrapper)

或其他完全不同的东西?

我可以从ITask上的属性中获取元数据(任务名称,描述,唯一键)

感谢您的意见。

0 个答案:

没有答案