Подтвердить что ты не робот

Как добавить зависимости от пользовательских элементов управления в WPF

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Короче говоря, вы не вводите зависимости непосредственно в User Controls (View), а скорее в DataContext (ViewModel).

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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