2010-08-02 3 views
1

Итак, я ищу некоторые разъяснения, как можно удалить локатор сервисов из моего приложения.WPF DI Service Locator

У меня есть служба ViewManagerService, которая отвечает за то, какое представление активно, какие представления открыты и создают новый вид.

В настоящее время мои модели ViewModels получают введенную им IViewManagerService через инъекцию конструктора. Это ViewModels подвергать ICommands, что при вызове может затем сделать вызов

viewManager.Transition("MyCoolView", somePrimaryKey); 

ViewManagerService затем использует локатор сервиса для поиска и создавать новый вид с помощью клавиши «MyCoolView». Причина использования ключевой строки заключается в том, что я могу отделить представление от ViewModels. Я хотел бы сохранить общий вид ViewManagerService, чтобы я мог использовать его для других приложений, поэтому я не хочу, чтобы он зависел от определенного интерфейса IAbstractFactory.

Любые советы/предложения?

ответ

1

Вы можете полностью избавиться от магических струн, используя шаблон данных WPF. Лучший способ сделать это - использовать MVVM pattern. Он ортогонален DI, но является большим помощником.

После того, как вы сделали этот переход, вы можете иметь чистую архитектуру DI, не полагаясь на Service Locator anti-pattern.

+0

В настоящее время мой сервисный локатор принимает «магическую строку», выполняет поиск и создает представление. Затем он создает конкретный ViewModel для этого представления и устанавливает его в DataContext. (Использование виндзора). Затем он вызывает функцию Load (primaryKey) в модели представления. Если бы я использовал механизм моделирования шаблонов данных, у меня, по сути, есть ContentPresenter, у которого есть DataContext, установленный для конкретной модели ViewModel. Я смотрю правильно? Могу ли я затем обновить ViewModel, к которому я хочу перейти, предоставив все его конструкторы args (IViewManagerService и т. Д.), Или я бы это сделал по-другому? – HaxElit

+0

Да, вы можете новый новый ViewModel напрямую, или, для большей развязки, используйте абстрактную фабрику. Я бы предпочла последнее. –

+0

Я сделаю это! Взгляд в TypedFactoryFacility, который кажется действительно крутым. Являюсь основным переписыванием, но я думаю, что это к лучшему. Большое спасибо, я обязательно захвачу вашу книгу, когда она закончится :) – HaxElit

Смежные вопросы