WPF с Unity Container - Как зарегистрировать и разрешить ViewModels для Views
=============================================================================

Привет я пытаюсь использовать контейнер Unity в приложении WPF MVVM. Я не использовал Prism, как кажется, тяжелым. Вот структура приложения. Я пытаюсь выяснить, как разрешить представления в ViewModels и зависимости моделей представлений (сервисов).

Заявка:Просмотры

ViewModels

Библиотека

MainViewModel нужна ссылка на ICustomerService и IBookService

CustomerListViewModel нужна ссылка на ICustomerService

BoolListViewModel нужна ссылка на IBookService

BookDetailViewModel нуждается в ссылке на ICustomerService и IBookReserveService

CustomerDetailViewModel нуждается в ссылке на ICustomerService и IBookReserveService

У меня есть свойство getter setter для служб в каждой модели просмотра.

Я сталкиваюсь с вопросами о том, как использовать Dependency Injection с WPF, особенно для Views и ViewModel. Я пытался с Unity зарегистрироваться и решить в консольном приложении, которое работает нормально. Но я хотел бы поделиться некоторыми идеями о том, как это можно сделать для приложения WPF. Я пытался зарегистрироваться

и разрешите его с помощью container.Resolve ();

Но я не был уверен, как определить, какое представление должно использовать какую модель представления, и разрешить их при необходимости, а не при запуске приложения. Кроме того, я не разрешаю все сопоставления при запуске приложения. Это должно быть сделано, когда выбрано меню (Выбор клиента для просмотра деталей, выбор книги для просмотра деталей, сохранение клиента, резервная книга и т. Д.).

В основном то, что я прочитал, хотел использовать IView и IViewModel. Но не уверен, что понял в этом преимущество.

Любая помощь очень ценится.

Один способ, которым вы можете сделать это. Сначала зарегистрируйте ваши View-модели и сервисы в Unity следующим образом:

Во-вторых, установите свой взгляд "s DataContext для модели представления в представлении 'S конструктор, как это:

В-третьих, тыВам нужно будет внедрить ваши услуги в ваши View-модели:

Есть и другие способы сделать это с помощью файлов .config и т. Д., Но этого должно быть достаточно для начала, дайте мне знать, если вам нужно больше. Вы спросили, в чем преимущества DI, и я чувствую, что их много. Просто назову пару: способствует слабой связи между вашими компонентами и улучшает тестируемость. Я чувствую это's один из ключевых моментов для хорошего дизайна / реализации.

ОБНОВИТЬ:

С единством>= 3, вы можете пропустить регистрацию контейнера, если вы следуете следующим правилам именования: