我已经完成了Karl Shiffet 的“InTheBox”WPF 培训,发现它是学习 WPF 的绝佳资源。它确实带来的一件事是使用依赖注入和 Unity 容器。这是向我提出一些问题的代码部分:
public partial class App : Application {
protected override void OnStartup(StartupEventArgs e) {
IUnityContainer container = new UnityContainer();
container.RegisterType<IDialogService, ModalDialogService>(
new ContainerControlledLifetimeManager());
container.RegisterType<IEventRepository, EventRepository>(
new ContainerControlledLifetimeManager());
MainWindow window = container.Resolve<MainWindow>();
window.DataContext = container.Resolve<MainWindowViewModel>();
window.Show();
}
}
依赖项被注册到 UnityContainer 中,然后由 UnityContainer 注入到 MainWindowViewModel 中。我的问题是为什么要使用容器?就依赖注入而言,为什么不直接使用以下实现相同目的的代码:
protected override void OnStartup(StartupEventArgs e)
{
IDialogService dialogService = new ModalDialogService();
IEventRepository eventRepository = new EventRepository();
MainWindow window = new MainWindow();
window.DataContext =
new MainWindowViewModel(eventRepository, dialogService);
window.Show();
}
我仍在将依赖项从组合根注入到构造函数中,因此在这种情况下我认为使用 UnityContainer 没有任何好处。
我很欣赏它的存在显然是有原因的,但是有人可以解释在这种情况下它是否会增加任何东西吗?另外,是否还有另一种情况,使用这样的容器真的很容易?