所以我正在寻找一些澄清如何从我的应用程序中删除服务定位器。
我有一个ViewManagerService,负责了解哪个视图处于活动状态,哪些视图处于打开状态并创建新视图。
目前,我的ViewModel通过构造函数注入将IViewManagerService注入其中。这些ViewModel公开了ICommands,它们在被调用时可以调用
viewManager.Transition("MyCoolView", somePrimaryKey);
然后,ViewManagerService使用服务定位器查找并使用键“MyCoolView”实例化新视图。使用键字符串的原因是我可以将View与ViewModel分离。我想保持ViewManagerService足够通用,以便我可以将它用于其他应用程序,所以我不希望它依赖于特定的IAbstractFactory接口。
任何提示/建议?
答案 0 :(得分:1)
您可以使用WPF的数据模板引擎完全摆脱魔术字符串。最好的方法是使用MVVM pattern。它与DI正交,但却是一个很好的推动者。
完成转换后,您可以拥有纯粹的DI体系结构,而无需依赖Service Locator anti-pattern。