Ответ 1
Одним из возможных способов решения проблемы является использование подхода "ViewModel First" и использование соглашения о конфигурации.
Каков наилучший способ прозрачного вложения зависимостей (с использованием контейнера IOC) в пользовательские элементы управления в WPF?
Я предполагаю, что пользовательские элементы управления являются частью XAML для окна или других пользовательских элементов управления. Также я думаю, что родитель (кто бы это ни был) не должен нести ответственности за это. Решение для ручного ввода зависимостей от родительских выглядит недостаточно для меня. Я хочу избегать управления зависимостями моих компонентов в явном виде, поскольку это нарушает идею IOC.
Является ли какое-либо событие, возникающее при создании логического дерева, чтобы я мог перехватить его и ввести мои зависимости?
EDIT: по зависимостям Я также имею в виду ViewModel, Controller, Presenter (любой шаблон используется)
Спасибо, Андрей
Одним из возможных способов решения проблемы является использование подхода "ViewModel First" и использование соглашения о конфигурации.
Лучший способ справиться с зависимостями в WPF - это шаблон MVVM.
Короче говоря, вы не вводите зависимости непосредственно в User Controls (View), а скорее в DataContext (ViewModel).
Как я сделал это, чтобы иметь общий класс приложения, который вводит зависимости в ваш класс viewmodel (если вы используете шаблон проектирования MVVM?) - используйте контейнер DI, такой как Unity. См. Рамку приложений WPF (http://waf.codeplex.com/), которая содержит образцы только такого сценария, который вы описываете.
FrameworkElement имеет событие Initialized, которое вы можете подключить и ввести зависимости. Вы должны проверить, достаточно ли это для вашего сценария.
Я тоже боролся с этим блоком разума:
Также я думаю, что родитель (кто бы это ни был) не должны нести ответственность за это.
Тогда кто будет? Точка IoC заключается в том, что что-то другое (родительское, модель представления, что-то,...) определяет зависимости.