我已经完成了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的任何好处。
我显然很感激它有存在的理由,但是有人能解释一下在这种情况下它是否有所增加吗?还有,是否还有其他场景可以毫不费力地使用容器?