IOC的理解,整合AOP,解耦对Service层和Dal层的依赖

 DIP依赖倒置原则:系统架构时,高层模块不应该依赖于低层模块,二者通过抽象来依赖

依赖抽象,而不是细节

 贯彻依赖倒置原则,左边能抽象,右边实例化的时候不能直接用抽象,所以需要借助一个第三方

 高层本来是依赖低层,但是可以通过工厂(容器)来决定细节,去掉了对低层的依赖
 IOC控制反转:把高层对低层的依赖,转移到第三方决定,避免高层对低层的直接依赖(是一种目的)
那么程序架构就具备良好扩展性和稳定性

DI依赖注入:是用来实现IOC的一种手段,
 在构造对象时,可以自动的去初始化,对象需要的对象
构造函数注入 属性注入 方法注入,IOC容器初始化ApplePhone的时候 通过配置文件实例化 属性,方法,构造函数

复制代码
using Microsoft.Practices.Unity; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Ruanmou.Interface; using System; using Unity.Attributes;  namespace Ruanmou.Service {     public class ApplePhone : IPhone     {         [Dependency]//属性注入:不错,但是有对容器的依赖        public IMicrophone iMicrophone { get; set; }         public IHeadphone iHeadphone { get; set; }         public IPower iPower { get; set; }          //[InjectionConstructor]        public ApplePhone()         {             Console.WriteLine("{0}构造函数", this.GetType().Name);         }          //[InjectionConstructor]//构造函数注入:最好的,默认找参数最多的构造函数        public ApplePhone(IHeadphone headphone)         {             this.iHeadphone = headphone;             Console.WriteLine("{0}带参数构造函数", this.GetType().Name);         }          public void Call()         {             Console.WriteLine("{0}打电话", this.GetType().Name);          }          [InjectionMethod]//方法注入:最不好的,增加一个没有意义的方法,破坏封装        public void Init1234(IPower power)         {             this.iPower = power;         }     } }
复制代码

 

不管是构造对象,还是注入对象,这里都是靠反射做到的

有了依赖注入,才可能做到无限层级的依赖抽象,才能做到控制反转

 

IOC Unity容器 可以通过代码注册或配置文件注册接口对应实现类,实现了不依赖具体,可以对对象全局单例,线程单例

例子1

Service业务逻辑层升级,在原有1.0的基础上添加一些功能,使用配置文件注册

复制代码
      <container name="testContainer1">        <register type="Ruanmou.Interface.IPhone,Ruanmou.Interface" mapTo="Ruanmou.Service.ApplePhone, Ruanmou.Service"/>        <register type="Ruanmou.Interface.IPhone,Ruanmou.Interface" mapTo="Ruanmou.Service.
                    
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信