我正在开发一个严重依赖插件的.net应用程序.应用程序本身包含与远程服务器的连接.
最近我深入研究了应用程序域,并将它们视为将插件代码与应用程序其余部分隔离开来的理想解决方案.
然而,有一个很大的缺点使我无法实现托管插件的应用程序域.似乎没有办法通过引用传递对象来传递对连接对象的引用所需的另一个应用程序域.
我希望有人可以给我一个解决方法,以便我可以传递对该对象的引用.
注意:创建代理是不可能的,连接层已经充当代理,因为类是自动生成的.
注意2:System.AddIn不能使用,因为它在紧凑的框架上不可用.
您是否尝试过从MarshalByRefObject派生?这是一个痛苦,因为它搞砸了你的继承层次结构,但我认为这就是你想要的.
来自文档:
MarshalByRefObject是通过使用代理交换消息跨应用程序域边界进行通信的对象的基类.不从MarshalByRefObject继承的对象按值隐式编组.当远程应用程序引用按值对象编组时,对象的副本将跨应用程序域边界传递.
MarshalByRefObject对象直接在本地应用程序域的边界内访问.远程应用程序域中的应用程序第一次访问MarshalByRefObject时,会将代理传递给远程应用程序.对代理的后续调用将封送回驻留在本地应用程序域中的对象.
当跨应用程序域边界使用类型时,类型必须从MarshalByRefObject继承,并且不能复制对象的状态,因为对象的成员在创建它们的应用程序域之外不可用.
根据我的经验,它可能非常有限 - 你真的需要在AppDomain边界尽可能少地做,最好将自己限制在只需要原始类型,字符串和数组的操作上.这可能是由于我自己在使用多个AppDomain方面缺乏经验,但这只是一个警告,它有点像雷区.