繁体   English   中英

Autofac:注册具有依赖关系的类型

[英]Autofac: Registering types with dependencies

我正在尝试使用相应的视图模型注册我的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;
    });

是否有更动态的方法来避免为所有视图/页面编写这些行? (如果可能,不使用服务定位器模式)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM