背景我使用观察者/事件模式的派生以及来自以下的代码片段
开发了一个自定义插件架构:
代码项目:插件管理器
Microsoft:AppDomains
Daniel Soltyka:简单插件
我过去有一个问题。每个插件都加载在它自己的应用程序域中,这样它们就不能互相看到,也不能看到主应用程序域中的东西(我们的应用程序中有专有数据,我们不希望插件开发人员看到)。每个新的应用程序域/插件都会创建一个代理,以便与主应用程序中的插件进行通信。问题是代理在 5 分钟左右后断开连接。这很容易通过重写InitializeLifetimeService()
方法并返回 null ( reference ) 来解决。
问题
现在的问题是事情的另一面。我通过从主应用程序端向每个插件发送委托,在插件端“注册”回调函数。然后插件可以调用这些委托,这些委托将调用主应用程序中的函数。但是,与上述解释中的代理一样,代表显然会断开连接。
我在 SO 上阅读了这个ClientSponsor.Register()
,该方法听起来很棒,但它需要一个“MarshalByRefObject”作为参数。我的是代表,所以没有骰子。
我想找到一种方法,让我的主要应用程序代表在应用程序域之间保持连接,就像插件代理的方式一样。
有任何想法吗?