从插件访问主应用程序中的类

问题描述 投票:0回答:1

我有一个运行良好的插件系统,但我需要访问主应用程序中的类。 主应用程序中的类存储受保护的数据。 我需要能够从每个插件中放置和检索受保护的数据。

(MainApplication.Protect)可以看到(IPlugin.plugin),但我需要(IPlugin.plugin)才能看到(MainApplication.Protect)

其中 (MainApplication.Protect .PluginDataGet(IPlugin name) & .PluginDataPut(IPlugin name)) 只能由 (IPlugin.plugin) 访问

我尝试了反射,甚至尝试了接口。 也许我在某个地方做错了什么。

c# plugins reflection interface
1个回答
0
投票

这是一般方法:

  • 创建一个组件,例如,
    PluginInterfaces
    ,至少有两个接口:
    IPlugin
    IPluginHost
  • 接口
    IPlugin
    应该有一个接受
    IPluginHost
    实例的方法。例如,我们称其为
    IPlugin.Bind(IPlugin host, ...)
  • 主机应用程序和所有插件都引用此程序集。
  • 在您的所有插件中实现
    IPlugin
  • 在应用程序的某些类中实现
    IPluginHost
    。它的实例应该提供插件执行所需的所有成员。
  • 在主机应用程序中,加载所选插件后并在调用任何其他
    IPlugin
    方法之前,拥有一个实现
    IPluginHost
    的类的实例,并根据您的要求进行设置。
  • 在实现此接口的插件类实例上调用
    IPlugin.Bind(IPlugin host, ...)
    。传递您在上一步中准备的
    IPluginHost
    实例。
  • 利润!

请尝试一下。如果您需要更多详细信息,则必须提出其他问题。这个模式的安排可能略有不同,但想法是,在一般情况下,插件和插件主机是互惠的:它们以某种顺序相互传递一些接口实例,然后使用它们。

谢谢。
—SA

© www.soinside.com 2019 - 2024. All rights reserved.