加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – MVP依赖注入

发布时间:2020-12-15 17:59:42 所属栏目:百科 来源:网络整理
导读:使用MVP,施工和依赖注入的正常顺序是什么? 通常您为每个视图创建一个演示者,并将视图传递给构造函数中的演示者.但是如果你有: 多个视图需要收听事件的服务. 多个视图都指向相同的数据模型缓存. 有人可以从用户点击数据从服务器返回到服务中显示正常的信息
使用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)注入到您的视图和演示者中.但是在您描述的场景中,我建议您将演示者注入服务和缓存,而不是视图.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读