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

标签 c# wpf dependencies autofac

我正在尝试将我的 WPF View 注册到它们相应的 View 模型中,并避免使用代码隐藏。

到目前为止我的代码应该是这样的:

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

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

最佳答案

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

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

关于c# - Autofac:注册具有依赖关系的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56325699/

相关文章:

wpf - MVVM:绑定(bind)到 ListBox.SelectedItem 未更新?

visual-studio-2008 - 检查所有库和 dll 是否来自同一个版本?

c++ - 如何处理跨平台 C++ 项目中的依赖关系?

c# - 网络API : Odata route always returning a 404 response

wpf - border.background 图像已修复

c# - 如何在线程之间传递值?

c# - 使用属性抑制 PostSharp 多播

android - 从 android arsenal 添加存储库的问题

c# - 从列表获取数据到 JavaScript MVC 3?

c# - 适用于 WP7 的 XNA 高速平滑动画