Итак, я ищу некоторые разъяснения, как можно удалить локатор сервисов из моего приложения.WPF DI Service Locator
У меня есть служба ViewManagerService, которая отвечает за то, какое представление активно, какие представления открыты и создают новый вид.
В настоящее время мои модели ViewModels получают введенную им IViewManagerService через инъекцию конструктора. Это ViewModels подвергать ICommands, что при вызове может затем сделать вызов
viewManager.Transition("MyCoolView", somePrimaryKey);
ViewManagerService затем использует локатор сервиса для поиска и создавать новый вид с помощью клавиши «MyCoolView». Причина использования ключевой строки заключается в том, что я могу отделить представление от ViewModels. Я хотел бы сохранить общий вид ViewManagerService, чтобы я мог использовать его для других приложений, поэтому я не хочу, чтобы он зависел от определенного интерфейса IAbstractFactory.
Любые советы/предложения?
В настоящее время мой сервисный локатор принимает «магическую строку», выполняет поиск и создает представление. Затем он создает конкретный ViewModel для этого представления и устанавливает его в DataContext. (Использование виндзора). Затем он вызывает функцию Load (primaryKey) в модели представления. Если бы я использовал механизм моделирования шаблонов данных, у меня, по сути, есть ContentPresenter, у которого есть DataContext, установленный для конкретной модели ViewModel. Я смотрю правильно? Могу ли я затем обновить ViewModel, к которому я хочу перейти, предоставив все его конструкторы args (IViewManagerService и т. Д.), Или я бы это сделал по-другому? – HaxElit
Да, вы можете новый новый ViewModel напрямую, или, для большей развязки, используйте абстрактную фабрику. Я бы предпочла последнее. –
Я сделаю это! Взгляд в TypedFactoryFacility, который кажется действительно крутым. Являюсь основным переписыванием, но я думаю, что это к лучшему. Большое спасибо, я обязательно захвачу вашу книгу, когда она закончится :) – HaxElit