获取对象的AppDomain(Get the AppDomain of object)

2019-09-17 14:42发布

有没有什么办法,以确定其中的AppDomain中的对象或对象句柄实例创建?

Answer 1:

如果你的对象“走遍”使用(例如)序列从另一个AppDomain中当前的AppDomain那么它基本上已经在当前的AppDomain“创造”。 源应用程序域可以是当前计算机或远程计算机上的另一个过程在单独的过程。 据我所知,我不认为在CLR保持跟踪你,因为你是负责进程之间移动的物体。 你可能会需要一个字段添加到您的类,以便您可以设置和获取信息。

或者考虑使用LogicalCallContext同时用翻过一个AppDomain的移动电话跟踪这个信息,供各位对象。 这里是一个很好的博客由杰弗里里希特这一点。



Answer 2:

从另一个应用程序域的目的是透明代理。 这是可能得到真正的代理,并访问包含域ID的私有字段:

public static int GetObjectAppDomain(object proxy)
{
    RealProxy rp = RemotingServices.GetRealProxy(proxy);
    int id = (int)rp.GetType().GetField("_domainID", BindingFlags.Instance|BindingFlags.NonPublic).GetValue(rp);
    return id;
}

如果可能的应用程序域的列表是不知道, 这里是一个办法让所有的应用程序域的列表。



文章来源: Get the AppDomain of object