簡體   English   中英

獲取對象的AppDomain

[英]Get the AppDomain of object

有沒有辦法確定哪個AppDomain是對象或ObjectHandle實例創建的?

如果您的對象使用(例如)從另一個AppDomain序列化到當前AppDomain“旅行”,那么它基本上已在您當前的AppDomain中“創建”。 源AppDomain可以是當前計算機上的單獨進程,也可以是遠程計算機上的其他進程。 據我所知,我不認為CLR會為您跟蹤,因為您負責在進程之間移動對象。 您可能需要在類中添加一個字段,以便設置和獲取該信息。

或者考慮使用LogicalCallContext對象,在對應appdomains的呼叫旅行時為您跟蹤此信息。 是傑弗里里希特關於此的一個很好的博客。

來自另一個應用程序域的對象是透明代理。 可以獲取真實代理並訪問包含域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;
}

如果可能的應用程序域的列表是不知道, 這里是一個辦法讓所有的應用程序域的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM