精通MVC 5 学习笔记 =========依赖项注入====建立松耦合组件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36445227/article/details/81490638

前46页感觉都没什么用,

实体类效验没有卵用,日常用不到

Razor 辅助器 ,用的比较少

建立松耦合组件

我在这里就用自己的话来写一下我学到的东西:

首先有三个个体 : 接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ASPNETMVC5.Interface
{
   public interface IEmailSender
    {
        string Send();
    }
}

,接口的实现类 :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ASPNETMVC5.Interface
{
    public class MyEmailSender : IEmailSender
    {
        public string Send()
        {
            return "发送中";
        }
    }
}

 想要使用该接口中方法的类

首先接口可以被多个子类继承,同时接口本身也期待被继承(被继承后重写方法才能完成实际的任务)

所以接口被实现是不可或缺的一步

如上代码接口已经实现,现在就等着外界调用了,按照常规思想,我们会实例化 接口的实现类再调用其中的方法

namespace ASPNETMVC5.Interface
{
    public class PasswordResetHelper
    {
        IEmailSender sender = new MyEmailSender();
        public void ResetPassword()
        {
            sender.Send();
        }
    }
}

这导致了该类与 接口 和接口实现类都产生了关系 ,如果某一天我们用其他的 接口实现类来替代原先的类(MyEmailSender)

导致我们不得不在(PasswordResetHelper ) 中修改代码     IEmailSender sender = new MyEmailSender();改为其他

如果项目足够大你需要花费好几个步骤才能找到它 ,并修改.而且无法预知在什么地方有什么其他运用,拓展性极差

依赖项注入:

本例子最后就是为了引出这个好用的方法

  public class PasswordResetHelper
    {
        IEmailSender sender;

        public  PasswordResetHelper(IEmailSender senderArgs)
        {
            sender = senderArgs;
        }

        public void ResetPassword()
        {
            sender.Send();
        }
    }

构造函数需要传入一个 接口类型  : 用于接收 接口的实现类

类中有一个接口类型的变量  : 用于接收 接口的实现类

这种结构称之为 : 将   PasswordResetHelper 类 的构造函数 对  IEmailSender 接口  声明 了一个依赖项

解释:除非接收一个实现了接口的对象,否者不能使用和创建它 ,这里的 PasswordResetHelper 类 已经和  MyEmailSender 

没有依赖关系 ,仅仅和 接口是依赖关系

记得在 支付宝的SDK中见到过类似的机构,当时还没有学到这一招,既然阿里的工程师都在用说明就是好东西

猜你喜欢

转载自blog.csdn.net/qq_36445227/article/details/81490638
今日推荐