Karl Shiffet による「InTheBox」WPF トレーニングを完了しましたが、WPF を学習するための優れたリソースであることがわかりました。取り上げられたことの 1 つは、依存性注入と 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 を使用するメリットはありません。
理由があることは明らかですが、この状況で何かを追加するかどうかを誰かが説明できますか? また、このようなコンテナの使用が本当に簡単である別の状況はありますか?