C# 向视图注册演示者

C# 向视图注册演示者,c#,mvp,autofac,C#,Mvp,Autofac,如果我有一个这样的演讲者- public class LandingPresenter : ILandingPresenter { private ILandingView _view { get; set; } private IProductService _productService { get; set; } public LandingPresenter(ILandingView view, IProductService)

如果我有一个这样的演讲者-

public class LandingPresenter : ILandingPresenter
{            
    private ILandingView _view { get; set; }
    private IProductService _productService { get; set; }

    public LandingPresenter(ILandingView view, IProductService)
    {
        ....
    }
}
考虑到从属视图不会注册(但IPProductService会注册),我如何向Autofac注册此演示者

builder.RegisterType().As()????

为什么不在容器中注册视图,让Autofac工作!然后,通过对演示者使用构造函数注入和对视图使用属性注入,可以自动连接演示者和视图。您只需使用属性关联注册视图:

builder.RegisterAssemblyTypes(ThisAssembly).
    Where(x => x.Name.EndsWith("View")).
    PropertiesAutowired(PropertyWiringFlags.AllowCircularDependencies).
    AsImplementedInterfaces();
演示者:

public class LandingPresenter : ILandingPresenter
{            
    private ILandingView _view;
    private IProductService _productService { get; set; }

    public LandingPresenter(ILandingView view, IProductService _productService)
    {
        ....
    }
}
视图:


如果您想先查看,则应该能够将其反转,以便演示者将视图作为属性。

您所说的“视图将不被注册”是什么意思?您想显式地提供它,还是..?抱歉,是的,在视图中,我会像so-Presenter=new-LandingPresenter(this)那样构造Presenter;(IPProductService将使用Autofac工厂注入)嗨,丹尼尔,感谢您的回复!正如您所发布的那样,我将其连接起来,但是我得到了一个错误:(--无法解析构造函数Void.ctor的参数“Views.Landing.ILandingView view”(Views.Landing.ILandingView,…。似乎Autofac仍然不知道如何处理参数ILandingView我仔细检查了Autofac是否注册了正确的程序集有什么想法吗?这意味着视图LandingView(作为ILandingView实现者)尚未注册。如果在创建Autofac时使用builder.RegisterAssemblyTypes,并确保参数(在我的示例中为ThisAssembly)指向包含视图的程序集,它应该可以工作。我现在已经通过了此错误,但现在在加载Landing.aspx页面时,视图的实例被注入到控制器中,该控制器将不工作,因为它与在页面加载时创建的实例不同。这将导致对象未设置为inst基本上所有的属性在视图……(然后你的初始问题得到了答案,考虑接受它。从你以前的帖子不清楚,所讨论的框架是ASP.NET WebFrase.看看这里有关AutoFac WebFrand集成的信息:和这里的MVP/MVC在WebFrases中提出的解决方案:
public class LandingPresenter : ILandingPresenter
{            
    private ILandingView _view;
    private IProductService _productService { get; set; }

    public LandingPresenter(ILandingView view, IProductService _productService)
    {
        ....
    }
}
public class LandingView : UserControl, ILandingView
{
    // Constructor

    public LandingView(... other dependencies here ...)
    {
    }

    // This property will be set by Autofac
    public ILandingPresenter Presenter { get; set; }
}