WPF DI服务定位器

时间:2010-08-02 20:54:49

标签: wpf dependency-injection service-locator

所以我正在寻找一些澄清如何从我的应用程序中删除服务定位器。

我有一个ViewManagerService,负责了解哪个视图处于活动状态,哪些视图处于打开状态并创建新视图。

目前,我的ViewModel通过构造函数注入将IViewManagerService注入其中。这些ViewModel公开了ICommands,它们在被调用时可以调用

viewManager.Transition("MyCoolView", somePrimaryKey);

然后,ViewManagerService使用服务定位器查找并使用键“MyCoolView”实例化新视图。使用键字符串的原因是我可以将View与ViewModel分离。我想保持ViewManagerService足够通用,以便我可以将它用于其他应用程序,所以我不希望它依赖于特定的IAbstractFactory接口。

任何提示/建议?

1 个答案:

答案 0 :(得分:1)

您可以使用WPF的数据模板引擎完全摆脱魔术字符串。最好的方法是使用MVVM pattern。它与DI正交,但却是一个很好的推动者。

完成转换后,您可以拥有纯粹的DI体系结构,而无需依赖Service Locator anti-pattern