2011-06-14 72 views
2

的方法在MSDN文檔中的AppDomain.CreateInstanceAndUnwrap方法,它作爲一個音符使用AppDomain.CreateInstanceAndUnwrap創建類型T的實例,然後早期綁定類型T

如果你作出規定對由CreateInstanceAndUnwrap返回的類型爲T1的對象的方法M進行早期綁定調用,並且該方法對當前程序集或程序集以外的程序集C中的T2類型對象的方法進行早期調用包含T1,程序集C被加載到當前的應用程序域中。即使在DynamicMethod的主體或其他動態生成的代碼中對T1.M()進行了早期綁定調用,也會發生此加載。如果當前域是默認域,則程序結束之前,程序集C不能被卸載。如果當前域稍後嘗試加載程序集C,則加載可能失敗。

(http://msdn.microsoft.com/en-us/library/3c4f1xde.aspx)

是否有人在上面注意一個技術性的解釋?爲什麼會這樣?在對象上首次調用方法時是否完成了組件依賴關係查找?

回答

3

組件依賴關係是在創建對象的實例時調用的。

讓我們分析一下假設場景。我們有2個DLL:Lib1和Lib2。 (Lib1使用來自Lib2的方法)。

在我們的應用程序的主要方法看起來如下:

Worker localWorker = new Worker(); 
localWorker.PrintDomain(); 

AppDomain ad = AppDomain.CreateDomain("New domain"); 
Worker remoteWorker = (Worker)ad.CreateInstanceAndUnwrap("Lib1","Lib1.Worker"); 
remoteWorker.PrintDomain(); 

大會依賴性檢查線路:

Worker remoteWorker = (Worker)ad.CreateInstanceAndUnwrap("Lib1","Lib1.Worker"); 

例如,如果Lib2.dll不存在,我們會得到一個例外。