Autofac:注册具有依赖项的类型

时间:2019-05-27 12:01:39

标签: c# wpf dependencies autofac

我正在尝试将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;
    });

是否有更动态的方式来避免必须为所有视图/页面写这些行? (如果可能的话,不使用Service locator模式)。

1 个答案:

答案 0 :(得分:3)

您可以创建一个通用方法来注册您的类型:

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>();