zoukankan      html  css  js  c++  java
  • 依赖倒置、控制反转和依赖注入

    这里区分以下几个常容易混淆的词:依赖倒置(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();
    		}
    
  • 相关阅读:
    Android ClearEditText:输入用户名、密码错误时整体删除及输入为空时候晃动提示
    Activity界面切换动画特效。
    点击事件的确认取消对话框。
    安卓菜单的实现,各种添加菜单的方法。
    联系人的侧边字母索引ListView 将手机通讯录姓名通过首字母排序。
    获取手机屏幕密度。
    Android统计图表MPAndroidChart.
    性能测试
    自动化框架
    排序算法
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/8524422.html
Copyright © 2011-2022 走看看