我正在尝试将我的 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/