我有一個ViewModel類,我想通過統一ServiceLocator來解析,但我的viewModel需要一個參數給構造函數。該參數的類型是我的應用程序中的一個實體(一個Customer對象),而不是某個服務實現。我知道,編碼對Unitycontainer本身我可以通過這樣的paramater:傳遞參數到IServiceLocator
_container.Resolve<CustomerDetailViewModel>(new ParameterOverrides {{"customer", customer}});
,但如果我沒有到容器直接訪問我需要通過服務定位,以這樣的:
(CustomerDetailViewModel)ServiceLocator.Current.GetInstance<CustomerDetailViewModel>();
但是使用第二種方法,我無法將任何參數傳遞給ServiceLocator。有什麼辦法可以做到嗎?從ServiceLocator獲取容器的實例然後使用它是否「錯誤」?
我聽到你在說什麼Steven,但在我的實例中,Customer實體是作爲itemsControl(主)的選定項目來的,我想將它傳給我detail viewModel。沿着這條線的某處,我需要爲實體提供詳細信息viewModel - 也許只是在細節viewModel上使用Customer屬性是一條路,但它可以很容易地進入構造函數.... – 2011-03-15 14:04:26
當你一路使用依賴注入,完全無法通過構造函數獲取Customer對象,只是因爲viewModel細節將被注入到主構造函數中。在您的代碼運行時,詳細viewModel已經創建。這樣做將確保最佳的可測試性。在構造函數中,你只需要注入依賴關係。在這種情況下,您的客戶不是依賴關係,而只是狀態信息。您應該將其設置爲屬性或將其作爲方法參數提供。 – Steven 2011-03-15 14:11:55