Я хочу начать использовать инъекцию зависимостей в моем приложении WPF, в основном для лучшей проверки работоспособности. Мое приложение в основном построено по шаблону M-V-VM. Я смотрю autofac для моего контейнера IoC, но я не думаю, что это слишком важно для обсуждения.
Включение службы в начальное окно кажется простым, поскольку я могу создать контейнер и разрешить его в App.xaml.cs.
Чего я боюсь, так это то, как я могу использовать ViewModels и сервисы DI в пользовательских элементах управления? Пользовательские элементы управления создаются с помощью разметки XAML, поэтому нет возможности Resolve()
их.
Лучшее, что я могу придумать, - разместить контейнер в Синглтоне, а пользовательские элементы управления разрешат их ViewModels из глобального контейнера. В лучшем случае это похоже на решение на полпути, поскольку все еще требуется, чтобы мои компоненты зависели от ServiceLocator.
Возможна ли полная IoC с помощью WPF?
[править] - Призма была предложена, но даже оценка Призма кажется большой инвестицией, я надеюсь на что-то меньшее
[edit] здесь фрагмент кода, где я остановлен
//setup IoC container (in app.xaml.cs)
var builder = new ContainerBuilder();
builder.Register<NewsSource>().As<INewsSource>();
builder.Register<AViewModel>().FactoryScoped();
var container = builder.Build();
// in user control ctor -
// this doesn't work, where do I get the container from
VM = container.Resolve<AViewModel>();
// in app.xaml.cs
// this compiles, but I can't use this uc,
//as the one I want in created via xaml in the primary window
SomeUserControl uc = new SomeUserControl();
uc.VM = container.Resolve<AViewModel>();