我们正在构建一个.NET应用程序,我们加载外部代码程序集("插件").到目前为止,我们将这些程序集加载到单个(主)应用程序域中.
我们希望能够在加载后卸载它.
为此,我们正在设计一个系统,该系统将创建一个单独的辅助AppDomain来托管插件程序集,以便随意卸载.
我们用这种方法遇到的问题:
在这种情况下,是否存在对应用程序进行分区的常见做法?我们可以采用的最佳解决方案是什么?
另一个有趣的问题 - 为什么MarshalByRef没有属性并迫使我们从一个对象派生出来?
跨 AppDomain 进行通信的最简单方法是使用AppDomain.CreateInstanceAndUnwrap。这将允许您实例化另一个 AppDomain 中的对象并返回该对象的代理。通过代理,您可以有效地跨应用程序域进行方法调用。
如果您当前的类没有扩展,MarshalByRef那么您应该创建一个桥接类来充当中间人。