在 WPF 应用程序中使用 Unity DI 容器

Using Unity DI container in WPF application

我是 WPF 新手,正在考虑尝试 DI。我决定将 OnStartup 方法作为组合根。

  protected override void OnStartup(StartupEventArgs e)
    {      
        IUnityContainer container = new UnityContainer();
        container.RegisterType<IMailSender, Model.Concrete.GmailSender>();
        var mainWindow = container.Resolve<MainWindow>();
        mainWindow.Show();
    }

但是,应用启动后,出现两个windows,正常的,有我的内容,完全是空的(好像没有初始化)。怎么了?

您需要删除 App.XAML 中的 StartUri。设置应用程序主 window 也是一个好习惯。参考下面的代码。

protected override void OnStartup(StartupEventArgs e)
    {
        IUnityContainer container = new UnityContainer();
        container.RegisterType<IMailSender, Model.Concrete.GmailSender>();
        var mainWindow = container.Resolve<MainWindow>();            
        Application.Current.MainWindow = mainWindow;
        Application.Current.MainWindow.Show();
    }