2

背景我使用观察者/事件模式的派生以及来自以下的代码片段
开发了一个自定义插件架构:

代码项目:插件管理器
Microsoft:AppDomains
Daniel Soltyka:简单插件

我过去有一个问题。每个插件都加载在它自己的应用程序域中,这样它们就不能互相看到,也不能看到主应用程序域中的东西(我们的应用程序中有专有数据,我们不希望插件开发人员看到)。每个新的应用程序域/插件都会创建一个代理,以便与主应用程序中的插件进行通信。问题是代理在 5 分钟左右后断开连接。这很容易通过重写InitializeLifetimeService()方法并返回 null ( reference ) 来解决。

问题

现在的问题是事情的另一面。我通过从主应用程序端向每个插件发送委托,在插件端“注册”回调函数。然后插件可以调用这些委托,这些委托将调用主应用程序中的函数。但是,与上述解释中的代理一样,代表显然会断开连接。

我在 SO 上阅读了这个ClientSponsor.Register(),该方法听起来很棒,但它需要一个“MarshalByRefObject”作为参数。我的是代表,所以没有骰子。

我想找到一种方法,让我的主要应用程序代表在应用程序域之间保持连接,就像插件代理的方式一样。

有任何想法吗?

4

1 回答 1

1

好的,我想出了如何解决这个问题。我所做的是我改变了我的方法并创建了一个独立的代理对象MarshalByRefObject,我重载了相同的InitializeLifetimeService()函数,这样它就不会断开连接。然后我让它成为插件用来与主应用程序通信的代理。

所以现在,我没有将代理从主应用程序发送到每个插件以供使用,而是发送该代理对象,每个插件都通过它进行通信。有点像交换电话号码。插件向主应用程序发送其代理,然后主应用程序向每个插件发送其代理。

于 2011-04-07T20:04:02.370 回答