WPF + DI: передача параметров

158
19 марта 2019, 07:10

Как грамотно совместить Dependency Injection с передачей параметров между окнами приложения WPF?

Допустим, есть приложение WPF, состоящее из двух форм: MainWindow и ChildWindow. Для каждой формы есть своя ViewModel. На главной форме выводится список неких объектов-моделей, и есть кнопка вызова ChildWindow. При нажатии на кнопку надо взять из списка некий параметр и передать его в ChildWindow, а в ее конструкторе создать ViewModel и передать этот параметр ей:

public ChildWindow(int CustId) {
    InitializeComponent();
    ChildViewModel model = new ChildViewModel(CustId);
    DataContext = model;
}

ChildViewModel для своей работы требует некий сервис DataService. Без DI я порождал его напрямую в конструкторе модели.

Теперь я хочу ослабить связанность кода, и делать это через IoC-контейнер (Unity, Autofac, Windsor - без разницы). Внедрить зависимость я предполагал через конструктор, так как это наиболее понятный способ узнать все зависимости класса сразу:

private IDataService ds;
public ChildViewModel (IDataService service) {
    ds = service;
}

А если еще и ChildViewModel порождать через контейнер, то вообще будет супер.

Но в этом случае я теряю возможность передать через конструктор свой параметр CustId. Property Injection и Method Injection мне не нравятся. Что-то я заплутал в трех соснах, как же мне совместить передачу параметров с внедрением зависимостей?

READ ALSO
Dependency Injection и класс контекста

Dependency Injection и класс контекста

Проект сделан по трехуровневой архитектуреНужно, что бы Entity Framework создал базу данных по классу контекста и внедрить через Dependency Injection этот...

168
Файлобменная сеть для программиста

Файлобменная сеть для программиста

Пишу программу на C#Суть программы в скачивании определенных компонентов, таких как например:

126
Прозрачный UserControl

Прозрачный UserControl

И так проблема заключается в том что у меня есть UserControl на котором есть кнопка, у юзер контрола фон - transparent у кнопки тоже, но при добавлении...

168
EF6 и Postgres ошибка

EF6 и Postgres ошибка

Сделал dll в которой классы и датаконтекст

192