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