依赖倒置、控制反转和依赖注入

这里区分以下几个常容易混淆的词:依赖倒置(DIP,DependencyInversion Principle)、控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI)。

依赖倒置

著名的好莱坞法则:不要调用我们,我们会调用你。
体现在:高层模块不应依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于具体,具体应该依赖于抽象。

控制反转

代码的控制权教友系统,而不是代码内部。主要所在框架开发中,主要类和模块的调用顺序由框架决定,自己所编写的代码也有框架调用(例如:ASP.Net MVC,我们主要编写Model,View和Controler,但具体他们间的调用叫由MVC框架控制)。

依赖注入

依赖注入是客户类依赖服务类的抽象接口,在运行时根据上下文环境,由其他组件(例如DI容器)实例化具体的服务类实例,将其注入到客户端类的运行时环境,实现客户类于服务类实例间松散的耦合关系。

依赖注入例子

常有的依赖注入方式有:接口注入,将对象间的关系转移到一个接口,以接口注入控制。
这里新建类库IServer,新建类库ServerA引用类库IServer,新建控制台DITest引用类库IServer。本来控制台DITest依赖于类库ServerA,这里运行时动态注入(类库ServerA生成的dll文件需要放在控制台生产的exe文件夹下)
类库IServer下新建接口IRunServer

    public interface IRunServer
    {
        void Move();
    }

类库ServerA下新建类

    public class CarServer : IRunServer
    {
        public void Move()
        {
            Console.WriteLine("汽车在路上驾驶。");
        }
    }

控制台DITest下调用

        static void Main(string[] args)
        {
            //可以将其写入配置文件读取
            IRunServer run = Assembly.LoadFrom("ServerA.dll").CreateInstance("ServerA.CarServer",false) as IRunServer;
            run.Move();
            Console.ReadKey();
        }

转载于:https://www.cnblogs.com/LoveTomato/p/8524422.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值