1
所以我正在尋找一些解釋如何從我的應用程序中刪除服務定位器。WPF DI服務定位器
我有一個ViewManagerService負責瞭解哪個視圖處於活動狀態,哪些視圖已打開並創建新視圖。
目前我的ViewModels通過構造函數注入獲取注入到它們中的IViewManagerService。這些的ViewModels揭露個ICommand是調用然後可以撥打電話到
viewManager.Transition("MyCoolView", somePrimaryKey);
時ViewManagerService然後使用一個服務定位器來查找和實例化的關鍵「MyCoolView」的新觀點。使用密鑰字符串的原因是,我可以將View與ViewModels解耦。我想保持ViewManagerService的通用性,因此我可以將其用於其他應用程序,所以我不希望它依賴於特定的IAbstractFactory接口。
任何提示/建議?
目前我的服務定位器需要在「魔術字符串」查找並實例化一個視圖。然後爲該視圖實例化一個特定的ViewModel,並將其設置爲DataContext。 (使用windsor)。然後它調用視圖模型上的Load(primaryKey)函數。如果我要使用數據模板引擎,我基本上有一個ContentPresenter,它已將DataContext設置爲我正在查看的特定ViewModel?然後,我會通過提供它的所有構造函數參數(IViewManagerService等)來創建我想要轉換到的ViewModel,或者我會以不同的方式使用atchitect嗎? – HaxElit 2010-08-03 14:36:15
是的,你可以直接新建ViewModel,或者爲了更好的解耦,可以使用Abstract Factory。我傾向於選擇後者。 – 2010-08-03 16:54:19
我會給它一個鏡頭!縱觀TypedFactoryFacility,看起來非常酷。將成爲重大改寫,但我認爲這是最好的。非常感謝,我肯定會抓住你的書,當它出來:) – HaxElit 2010-08-04 14:56:56