C# 解决方法.net应用程序域仅按值传递对象

C# 解决方法.net应用程序域仅按值传递对象,c#,appdomain,marshalbyrefobject,C#,Appdomain,Marshalbyrefobject,我正在开发一个非常依赖插件的.net应用程序。应用程序本身包含到远程服务器的连接 最近,我深入研究了应用程序域,认为它们是将插件代码与应用程序其余部分隔离开来的理想解决方案 然而,有一个很大的缺点使我无法实现托管插件的应用程序域。似乎没有办法通过引用将对象传递给另一个应用程序域,而该应用程序域是传递对连接对象的引用所必需的 我希望有人能给我一个解决办法,这样我就可以传递对该对象的引用 注意:创建代理是不可能的,因为类是自动生成的,所以连接层已经充当代理 注2:System.AddIn无法使用,因

我正在开发一个非常依赖插件的.net应用程序。应用程序本身包含到远程服务器的连接

最近,我深入研究了应用程序域,认为它们是将插件代码与应用程序其余部分隔离开来的理想解决方案

然而,有一个很大的缺点使我无法实现托管插件的应用程序域。似乎没有办法通过引用将对象传递给另一个应用程序域,而该应用程序域是传递对连接对象的引用所必需的

我希望有人能给我一个解决办法,这样我就可以传递对该对象的引用

注意:创建代理是不可能的,因为类是自动生成的,所以连接层已经充当代理


注2:System.AddIn无法使用,因为它在compact framework上不可用。

您是否尝试从中派生?这是一种痛苦,因为它扰乱了您的继承层次结构,但我认为这是您想要的

从文档中:

MarshallByRefObject是基类 用于跨网络通信的对象 应用程序域边界按 使用代理交换消息。 不从继承的对象 MarshallByRefObject是隐式的 按值封送。当一个遥控器 应用程序引用封送处理 值对象,则该对象的副本为 跨应用程序域传递 边界

MarshalByRefObject对象是 直接在 本地应用程序的边界 域名。第一次申请 在远程应用程序域中 访问MarshalByRefObject,即代理 传递给远程应用程序。 对代理的后续调用是 封送回驻留的对象 在本地应用程序域中

类型必须从继承 当类型为时,MarshallByRefObject 跨应用程序域使用 边界,以及 对象不能被复制,因为 对象的成员不可用 在应用程序域之外,其中 他们是被创造出来的


根据我的经验,这可能是非常有限的——您确实需要在AppDomain边界上尽可能少地执行操作,最好将自己限制在只需要基本类型、字符串和两者的数组的操作上。这很可能是因为我自己在处理多个AppDomains方面缺乏经验,但这只是一个警告,这有点像雷区。

要在AppDomains之间处理同一个实例,它必须继承自。通过这种方式,对对象(包括属性等)的每个方法调用实际上都是对其他应用程序域的远程调用。这有帮助吗?

请注意,清理
MarshalByRefObject
代理是根据租约进行清理的。简而言之,如果在特定时间内不使用对象,它将被回收。您可以通过重写
InitializeLifetimeService
来控制此操作,以返回符合您需要的租赁对象。如果返回
null
,则实际上禁用了租赁,然后仅在卸载AppDomain时回收对象

我看到它会破坏我的继承层次结构。我会查的,谢谢。我试过了,看起来很有希望。但是,大多数插件都会返回一个用户控件,该控件需要托管在主应用程序中,这看起来非常棘手:sYes,做跨域用户界面的工作非常困难。你看过.NET3.5system.AddIn的东西吗?我不知道它是否对你有用,但可能值得一看。。。