2012-06-01 38 views
1

好吧,這裏有問題,我有一個winform應用程序,嚴重依賴於靜態變量,它是一個單身應用程序(一次只有一個進程的實例)。靜態對象/多個應用程序域/一個進程

我現在需要創建一個包裝應用程序,該應用程序可以創建那些winform應用程序的所述6並在其主窗口之間切換。這樣做的原因是這些應用程序有很多靜態引用,必須根據它們連接的數據庫進行更新。我們的用戶現在需要連接到幾個數據庫,重新設計代碼以擺脫靜態問題不是一種選擇。

所以我的問題是,我知道我可以在一個進程中創建新的應用程序域,但是每個應用程序域都得到一組新的靜態引用嗎?或者我真的必須有獨立的流程?如果是這樣,我怎麼能建立一個新的應用程序,創建舊的應用程序的6個實例,並將數據傳遞給它們中的每一個(隱藏/顯示,加載這個對象,查詢這個數據庫等等)對於簡單的事情來說,因爲這將最終成爲一個扔掉的項目。

謝謝!

+2

「我們的用戶現在需要[這個]」,「這將最終成爲一個扔掉的項目」似乎是矛盾的。 –

+0

是的,它確實如此。他們需要這個臨時項目,修復所有靜態參考問題需要花費的時間遠遠超過臨時收益。我們的測試階段完成後,這些都將被拋棄。這真的是一個我正在尋找的工作。 – Matt

回答

1

每個應用程序域都有自己的一組加載程序集(域名之間共享的domain-neutral assemblies除外)和類型。應用程序域中的每種類型都有自己的靜態變量實例(在CLR以特殊方式提供此特性的情況下)。

+1

不完全正確。程序集可以跨AppDomains共享。 CLR確實添加了一些靜態代碼來隔離AppDomain之間的靜態變量,當涉及多個應用程序域時,靜態變量會變慢一點。 –

+0

@AloisKraus:好評,+1。但是,我希望,這不是實際的主題啓動器。無論如何,我已經更新了答案。 – Dennis

相關問題