Я пытаюсь применить DI к моему приложению WPF (с MVVM). Я хотел бы придерживаться onion architecture, и поэтому моя модель имеет интерфейс IRepository
, который вводится через контейнер IoC в приложение из его корня композиции.Как вы добавляете зависимости от представления, такие как репозиторий в приложении WPF, без привлечения уровня представления (например, модели представления)?
Есть бесчисленное множество источников like this SO answer и this post on wpftutorial.net, которые говорят о DI с WPF, но которые показать репозиторий впрыскивается в модели представления. Мне это не кажется правильным. Модель представления, на мой взгляд, не должна беспокоить (то есть не знать) репозиторий.
Есть ли способ разработать мое приложение так, чтобы оно надлежащим образом соответствовало архитектуре лука и не включало уровень представления в инъекции зависимостей репозитория (поскольку это возможно, учитывая, что корень композиции должен находиться на верхнем уровне/исполняемый файл, где находятся представления)?
Мое предпочтение заключается в том, чтобы обернуть репозитории в более высокие абстракции, которые инкапсулируют варианты использования и запросы. Вы можете вводить эти абстракции в свою модель просмотра. Взгляните на [это] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91) и [это] (https://www.cuttingedge.it/blogs/steven /pivot/entry.php?id=92), например. – Steven
Я также не поклонник проблем смешивания, но я решил это, представив еще один уровень абстракции, который является ViewModelFactory, который делает всю работу, чтобы составить данную модель. Поскольку я делегирую эту задачу на этот завод, он может получить интерфейс контракта с репозиторием (или IQueryHandlers, как сказал Стивен) в своем конструкторе, и работать с ним позже. – kayess