使用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)注入到您的视图和演示者中.但是在您描述的场景中,我建议您将演示者注入服务和缓存,而不是视图.