我花了幾個小時閱讀關於AppDomains的信息,但我不確定它們的工作方式與我所希望的完全相同。.NET AppDomains可以這樣做嗎?
如果我有兩個班,一般富<牛逼>中的AppDomain#1,酒吧中的AppDomain#2:
應用程序域#1是應用程序。 App Domain#2就像一個插件,可以動態加載和卸載。
AppDomain#2想創建Foo <Bar>並使用它。 Foo <T>在內部使用AppDomain#1中的大量類。
我不希望AppDomain#2使用反射對象foo,我希望它使用Foo <bar> foo,具有所有靜態類型和編譯速度。考慮到包含Foo <T>的AppDomain#1是否永遠不會被卸載?
如果是這樣,在使用Foo時是否發生任何遠程操作<Bar>?
當我卸載AppDomain#2時,類型Foo <Bar>被銷燬?
編輯 SO剝去了我所有的< >,手動添加它們。
IpcChannel沒有必要。你可以使用appdomain.CreateInstance爲你做這個。只要有問題的類是可序列化的或者marshalobjbyref,你就可以得到你想要的,而不必配置任何遠程處理通道。 .net運行時足夠聰明,知道如何以高效率在兩個應用程序域之間進行遠程處理,因爲它們位於同一臺計算機上。 – 2010-05-31 17:28:55
好吧,如果我瞭解你,我可以創建Foo; AppDomain#2中的實例沒有問題,並且像正常一樣使用它們 - 沒有遠程處理 - 只需加載包含Foo 的程序集。 我真的需要在AppDomain#1中分離出一個只包含幾個靜態的長期單身人士的程序集,這些單身人員擁有和管理我的非託管資源,這樣只有一個這樣的副本。這裏不需要Foo 。 其中AppDomain#2中的Foo 使用來自AppDomain#1的這些對象,將需要某種遠程處理。通過AppDomain進行靜態方法調用的一些方式 - 什麼? –
Eloff
2010-05-31 17:46:58
@Vagaus似乎有答案,讓AppDomain#1的子類MarshalByRefObject中的對象,然後代理AppDomain#1中的長期單身人士,這可以在AppDomain#2中愉快地使用,毫無疑問,透明地編組方法參數和跨AppDomain邊界的返回值。 – Eloff 2010-05-31 17:57:34