想要在WPF应用程序中实现依赖注入

时间:2019-07-10 14:09:33

标签: c# wpf dependencies code-injection

在现有的WPF应用程序中,我想实现依赖项注入。 因此,在应用程序启动时,我设置了di容器,并让窗口像这样构建:

var builder = new ContainerBuilder();

builder.RegisterType<SplashScreen>().AsSelf();
builder.RegisterType<ILogger>().As(Logger);

Container = builder.Build();

using (var scope = Container.BeginLifetimeScope())
{
      var window = scope.Resolve<SplashScreen>();
      window.Show();
      window.Initialiseren();
}

在我的窗口中,我有一个按钮可以调用具有多个依赖项的另一个窗口?

public partial class AnotherWindow
{
      public AnotherWindow(ILogger)
      {
            ...
      }
}

public partial class Window
{
      public void Button_Click()
      {
            AnotherWindow w = new AnotherWindow(new Logger());
            w.Show();

      }
}

如何在不将容器传递到周围的情况下使用容器来解决另一个窗口? 我的目标是使用autofac初始化ILogger。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

例如,您可以使用IContainer类的静态属性公开从Build()返回的App

internal static IContainer Container { get; set; }

然后您可以从任何视图访问它:

public void Button_Click()
{
    AnotherWindow w;
    using (var scope = App.Container.BeginLifetimeScope())
        w = scope.Resolve<SplashScreen>();
    w?.Show();
}