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