创建子appdomain的对象是否在该子appdomain中实例化了?
我有一个主AppDomain中的对象,它正在创建另一个AppDomain,它要求调用类可序列化,并在新的子AppDomain中创建调用类的实例。
我想知道它是不是这样,或者是否有一种方法可以创建子appDomain但仍然保持主appDomain中调用对象的原始实例化
答案 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
继承您的对象,您无需将其序列化以跨应用程序域边界进行调用。