zoukankan      html  css  js  c++  java
  • 依赖注入(IOC)

    IOC是Inversion of Control(控制反转,也叫依赖注入)的缩写,基本思想就是把类的依赖从类内部转化到外部以减少依赖。下面就来举一个实际的例子演示典型的依赖注入。

    首先创建一个类库项目OperationProvider,然后在项目中添加一个类OperationProvider.cs。

    Code

     这两个类很简单,提供了两种操作:加法和减法,并返回计算结果。
    再添加一个类库项目Calc,然后在项目中添加一个类Calc.cs。

    Code

    这个类调用OperationProvider.cs中的操作进行计算(因此需要添加OperationProvider类库项目的引用),然后以一定的格式返回计算结果。
    最后,添加一个控制台程序TestConsole来执行计算操作。

    Code


    这个控制台程序起了一个装配的作用。为Output类的Oper属性赋值(OperationProvider命名空间的一个类的实例)。这样一来整个系统的依赖关系如下图(TestConsole要添加对OperationProvider和Calc的引用,Calc要添加对OperationProvider的引用)。这样一来整个系统的依赖关系如图:

    主程序和两个项目有依赖,类库之间也有依赖。我们可以使用基于接口的编程来化解其中的一些依赖。创建一个类库项目Interface,然后为之创建一个类Interface.cs,如下:

    Code

    删除Calc项目对OperationProvider项目的引用,添加对Interface的引用,然后修改Calc.cs如下:

    Code

    在这里,OutputResult类不再依赖一个操作类,而是依赖于一个接口(所有的操作都遵循这个接口)。因此,OperationProvider项目也需要添加Interface项目的引用,并修改Operation.cs 如下:

    Code

    最后,为TestConsole控制台项目添加Interface项目的引用,重新编译整个解决方案。现在整个系统的依赖关系如图:

    虽然使用了接口,但是似乎只消除了部分的依赖,对于控制台程序对其他类库的依赖并没有消除。出现这样情况的原因就是OperationProvider和Calc类库都是事先引用,并且在程序中组装的。如果能动态加载和组装他们,那么就可以彻底消除这层依赖。下面,就来介绍如何使用Spring.Net框架来消除这个依赖。

    使用Spring.Net进行依赖注入
    修改TestConsole控制台项目,使用了IOC后我们只需要添加Interface项目的引用和Spring.Core程序集(用于IOC)以及System.Configuration程序集(用于加载配置)的引用。
    修改Program.cs如下:

    Code

    通过Sprint.Net,我们只需要依赖接口调用方法即可。Spring.Net可以通过配置文件完成动态加载程序集和组装,配置文件。

    源代码下载

  • 相关阅读:
    【NOIP2016提高组】 Day1 T3 换教室
    【NOIP2016 Day1 T2】天天爱跑步
    web@前端--html,css,javascript简介、第一个页面(常用标签简介)
    MySQL--视图view、触发器trigger、事务(start transaction)、存储过程(特殊的数据逻辑处理函数)、流程控制(if,case....)
    MySQL--pymysql模块
    MySQL--(了解)可能会用到的内置函数
    MySQL--详细查询操作(单表记录查询、多表记录查询(连表查询)、子查询)
    MySQL--表操作(约束条件foreign key关联表 多对1,多对多,1对1)
    MySQL--表操作(innodb表字段数据类型、约束条件)、sql_mode操作
    MySQL基本语句、存储引擎
  • 原文地址:https://www.cnblogs.com/lhking/p/1394972.html
Copyright © 2011-2022 走看看