使用MVP,施工和依赖注入的正常顺序是什么?
通常您为每个视图创建一个演示者,并将视图传递给构造函数中的演示者.但是如果你有:
>多个视图需要收听事件的服务.
>多个视图都指向相同的数据模型缓存.
解决方法
这是我做的:
首先我定义了这些接口:
public interface IView<TPresenter> { TPresenter Presenter { get; set; } } public interface IPresenter<TView,TPresenter> where TView : IView<TPresenter> where TPresenter : IPresenter<TView,TPresenter> { TView View { get; set; } }
那么这个抽象主持人类:
public abstract class AbstractPresenter<TView,TPresenter> : IPresenter<TView,TPresenter> where TView : IView<TPresenter> where TPresenter : class,IPresenter<TView,TPresenter> { protected TView view; public TView View { get { return this.view; } set { this.view = value; this.view.Presenter = this as TPresenter; } } }
视图是通过属性注入的,而不是构造函数,以允许设置器中的双向感情.请注意,需要安全投掷…
那么我的具体主持人就是这样:
public class MyPresenter : AbstractPresenter<IMyView,MyPresenter> { //... }
IMyView实现IView的位置.必须存在具体的视图类型(例如MyView),但它是解析它的容器:
>我在容器中注册MyPresenter类型,具有暂时的行为.
>我将容器中的MyView作为IMyView注册为暂时性的行为.
>然后我要求一个MyPresenter到容器.
>容器实现MyView
>它建立一个MyPresenter
>它通过AbstractPresenter.View属性将视图注入演示者.
> setter代码完成双向关联
>容器返回情侣Presenter / View
它允许您将其他依赖项(服务,repos)注入到您的视图和演示者中.但是在您描述的场景中,我建议您将演示者注入服务和缓存,而不是视图.