Хотите внедрить Dependency Injection в приложении WPF - PullRequest
0 голосов
/ 10 июля 2019

В существующем приложении 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();

      }
}

Как я могу использовать свой контейнер для разрешения другого окна, не пропуская мой контейнер повсюду? Моя цель - инициализировать ILogger с помощью autofac.

Заранее спасибо!

1 Ответ

1 голос
/ 10 июля 2019

Например, вы можете представить 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();
}
...