Как добавить зависимости в пользовательские элементы управления в WPF - PullRequest
13 голосов
/ 09 марта 2010

Каков наилучший способ прозрачного внедрения зависимостей (с использованием контейнера IOC) в пользовательские элементы управления в WPF?

Я предполагаю, что пользовательские элементы управления являются частью XAML для окна или других пользовательских элементов управления. Также я думаю, что родитель (кто бы это ни был) не должен нести ответственность за это. Решение для ручного введения зависимостей от родителя выглядит недостаточно чистым для меня. Я хочу избежать явного управления зависимостями моих компонентов, поскольку это разрушает идею МОК.

Есть ли какое-либо событие, которое возникает при создании логического дерева, чтобы я мог перехватить его и ввести свои зависимости?

EDIT: под зависимостями я также имею в виду ViewModel, Controller, Presenter (независимо от используемого шаблона)

Спасибо, Андрей

Ответы [ 5 ]

9 голосов
/ 09 марта 2010

Лучший способ справиться с зависимостями в WPF - использовать шаблон MVVM .

Короче говоря, вы не вводите зависимости непосредственно в пользовательские элементы управления (представление), а скорее в их DataContext (ViewModel).

2 голосов
/ 09 марта 2010

Способ, которым я это сделал, - создать общий класс приложения, который внедряет зависимости в ваш класс viewmodel (при условии, что вы используете шаблон проектирования MVVM?) - использовать DI-контейнер, такой как Unity. См. WPF Application Framework (https://github.com/jbe2277/waf), который содержит примеры такого сценария, который вы описываете.

0 голосов
/ 01 апреля 2010

Одним из возможных способов решения проблемы является использование подхода «ViewModel First» и использование соглашения о конфигурации.

0 голосов
/ 10 марта 2010

Я тоже боролся с этим блоком разума:

Также я думаю, что родитель (кто бы это ни был) не должен нести ответственность за это.

Тогда кто будет? Суть IoC в том, что что-то другое (родитель, модель представления, что-то, ...) определяет зависимости.

0 голосов
/ 09 марта 2010

FrameworkElement имеет событие Initialized, которое вы можете подключить и ввести зависимости. Вы должны проверить, достаточно ли рано для вашего сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...