Autofac: регистрация типов с зависимостями - PullRequest
1 голос
/ 27 мая 2019

Я пытаюсь зарегистрировать мои представления WPF с соответствующими им моделями представления и избегать использования кода позади.

Пока мой код будет выглядеть так:

 builder.Register(c =>
    {
        PageA page = new PageA();
        page.DataContext = c.Resolve<PageAViewModel>;
        return page;
    });

    builder.Register(c =>
    {
        PageB page = new PageB();
        page.DataContext = c.Resolve<PageBViewModel>;
        return page;
    });

Есть ли более динамичный способ избежать написания этих строк для всех представлений / страниц?(если возможно без использования шаблона локатора службы).

1 Ответ

3 голосов
/ 27 мая 2019

Вы можете создать универсальный метод, который будет регистрировать ваши типы:

public static class RegistrationExtension
{

    public static IRegistrationBuilder<TPage, ConcreteReflectionActivatorData, SingleRegistrationStyle> 
        RegisterPage<TPage, TViewModel>(this ContainerBuilder builder)
        where TPage : IPage
    {
        return builder.RegisterType<TPage>()
                      .OnActivated(e =>
                      {
                          e.Instance.DataContext = e.Context.Resolve<TViewModel>();
                      });

    }
}

, а затем зарегистрировать ваши страницы следующим образом:

builder.RegisterPage<PageA, PageAViewModel>();
...