创建子appdomain的对象是否在该子appdomain中实例化?

时间:2010-05-20 19:01:11

标签: c# .net appdomain

创建子appdomain的对象是否在该子appdomain中实例化了?

我有一个主AppDomain中的对象,它正在创建另一个AppDomain,它要求调用类可序列化,并在新的子AppDomain中创建调用类的实例。

我想知道它是不是这样,或者是否有一种方法可以创建子appDomain但仍然保持主appDomain中调用对象的原始实例化

2 个答案:

答案 0 :(得分:3)

没有

您正在代码中执行某些操作,导致对象被跨越域边界。

//the current class is creating a domain.  No types exist in the domain
var domain = AppDomain.CreateDomain("2nd Domain");

// create an instance of SomeType in 2nd Doman and create a proxy here
var assembly = typeof(SomeType).Assembly.FullName;
var type = typeof(SomeType).Name;
var proxy = domain.CreateInstanceAndUnwrap(assembly,type);
// at this point, only one instance exists in 2nd Domain.

//These will cause the current class to be pulled across the domain boundary
proxy.Whoops(this);
proxy.SomeEvent += new EventHandler(AMethodDefinedHere);
proxy.Callback = AnotherMethodDefinedHere;

只有当您将代理交给当前实例(并且代理使用它)时,才会将实例拉过边界。

您的代理应该只接受和返回原始类型(如字符串或字节或此类数组)或您定义的可序列化或扩展MarshalByRefObject的密封类型。

答案 1 :(得分:1)

MarshalByRefObject继承您的对象,您无需将其序列化以跨应用程序域边界进行调用。