简体   繁体   中英

Get the AppDomain of object

有没有办法确定哪个AppDomain是对象或ObjectHandle实例创建的?

If your object "travelled" using (eg) serialization from another AppDomain to the current AppDomain then it has essentially been "created" in your current AppDomain. The source AppDomain could be a separate process on the current computer or another process on a remote computer. As far as I am aware, I don't think that the CLR keeps track of that for you, since you are responsible for moving objects between processes. You would probably need to add a field to your class so that you can set and get that information.

Or consider using a LogicalCallContext object that tracks this information for you while travelling with a call accross appdomains. Here is a good blog by Jeffrey Richter about this.

An object from another app domain is a transparent proxy. It is possible to get the real proxy and access the private field that contains the domain 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;
}

If the list of possible app domains isn't known, here is a way to get the list of all app domains.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM