我正在寻找一种在可以卸载的单独 AppDomain 中隔离组件(基于 3rd 方 dll)的方法。我的计划是使用基于CreateInstanceAndUnwrap
和 -MarshalByRefObject
的对象与组件进行通信。
问题是,为了使用从MarshalByRefObject
主程序集中派生的对象,它必须引用组件 dll,我试图避免这种情况。我想我可以通过一个接口解耦它
class MyObject: MarshalByRefObject, IMyObject
{
}
但我不能将返回的对象CreateInstanceAndUnwrap
转换为IMyObject
(因为它实际上是一个代理,而不是我猜的真实对象?)。
我是否遗漏了什么,或者这无法完成,唯一的答案是 WCF?
更新:我遇到的实际问题是 IMyObject 被定义了两次:我将文件包含在主程序集中和组件程序集中。这样我得到一个异常“无法将透明代理转换为类型”。当我只使用从两个程序集中引用的一个接口/类定义时,它工作正常(正如 Will 建议的和我上面描述的)。