2009-12-11 96 views
2

我在使用Unity和WPF時遇到了一些問題。該場景是我有一個遵循MVVM設計模式的WPF應用程序。 A有一個名爲ViewKDI的模塊。在這個模塊中,我有一個名爲ViewKDIService的服務,ViewKDIService服務使用另一個名爲UserService的服務。統一返回服務的新實例

每次我加載模塊ViewKDI我希望Unity返回ViewKDIService和UserService的新實例。

我已經把下面的外殼引導程序:

Container.RegisterType<IUserService, UserService>(); 

在ViewKDI模塊我已經把以下內容:

Container.RegisterType<IViewKDIService, ViewKDIService>(); 

每次ViewKDI模塊加載ViewKDIService構造函數被調用。但是,UserService構造函數只是第一次調用,這意味着我沒有獲得UserService的新實例。

我需要統一性給我一個UserService的新實例,以便我可以與應用程序的其餘部分分開管理此會話。

任何想法?

感謝 費薩爾

+0

你能否提供更多關於何時解決每種類型的細節? IUserService是ViewKDIService的依賴項嗎? – 2009-12-11 16:45:56

+0

我沒有明確地調用解決方案,我只是將接口放在我的ViewModel的構造函數中,然後讓Unity解決它們。 IUserService不依賴於IViewKDIService。 – Faisal 2009-12-11 16:59:45

+0

查看哪些對象IUserService和IViewKDIService被注入以瞭解它們的生命週期會很有幫助。例如都注入到您的ViewModel或只是IUserService? – 2009-12-11 17:16:51

回答

2

統一的默認行爲是創建每一個新的實例對象每次一個請求,所以你應該不會看到此行爲。

從我可以從源代碼和MSDN文檔(this是一個很好的閱讀)中可以收集到的信息,當你註冊一個類型來告訴Unity應該如何構造和緩存類型時,你可以指定一個「終身管理器」對象。使用TransientLifetimeManager(本質上不執行緩存)將導致Unity每次重新創建類。所以試試這個:

Container.RegisterType<IUserService, UserService>(new TransientLifetimeManager()); 

...看看它是否每次都創建一個新的UserService。

+0

謝謝我會試試這個 – Faisal 2009-12-14 12:50:55