C# 对IOC的理解 依赖的转移
原文:https://blog.csdn.net/huwei2003/article/details/40022011
系统 可方便的替换 日志类
自己的理解:
依赖接口,日志的实例化 不直接写在依赖类中,而是放在构造函数的参数中。目的:谁调用谁实现。然后再借助ioc自动实例化注入到构造函数中
依赖的进化
- //1、直接依赖Log类
- // 系统更换Log类比较麻烦,因为每个类都依赖具体的实现类
- public class ProductService1
- {
- private Log _log;
- public ProductService1()
- {
- _log = new Log();
- }
- public void SayHello()
- {
- _log.Write();
- }
- }
- //2、依赖接口ILog
- // 方法的调用依赖接口ILog。以前是依赖具体实现类Log,换成依赖接口类ILog,这样在构造函数中可以更换其它的实现类
- // 在构造函数中 强依赖 ILog的具体实现
- public class ProductService2
- {
- private ILog _log;
- public ProductService2()
- {
- _log = new Log();
- }
- public void SayHello()
- {
- _log.Write();
- }
- }
- //3、强依赖的地方 变成了 谁调用谁实现
- // 这样就可以 不再类ProductService3的内部 具体实现ILog,把实现的地方,转移到类的外部
- public class ProductService3
- {
- private ILog _log;
- public ProductService3(ILog _log)
- {
- this._log = _log;
- }
- public void SayHello()
- {
- _log.Write();
- }
- }
日志类
- //日志接口
- public interface ILog
- {
- void Write();
- }
- //日志类1 实现 日志接口
- public class Log : ILog
- {
- public void Write()
- {
- Console.Write("Log");
- }
- }
- //日志类2 实现 日志接口
- public class TxtLog : ILog
- {
- void ILog.Write()
- {
- Console.Write("TxtLog");
- }
- }
- //日志类3 实现 日志接口
- public class DbLog : ILog
- {
- void ILog.Write()
- {
- Console.Write("DbLog");
- }
- }
调用方法
- //这种写法 一个不好地方。有很多类需要依赖ILog,就在很多个地方依赖
- public void test4()
- {
- ILog log = new Log();
- var productService = new ProductService3(log);
- productService.SayHello();
- }
- //依赖由ioc框架自动管理
- public void test5()
- {
- ContainerBuilder builder = new ContainerBuilder();
- //替换系统的日志类
- //builder.RegisterType<Log>().As<ILog>();
- //builder.RegisterType<TxtLog>().As<ILog>();
- builder.RegisterType<DbLog>().As<ILog>();
- builder.RegisterType<ProductService3>();
- IContainer container = builder.Build();
- var productService = container.Resolve<ProductService3>();
- productService.SayHello();
- }
C# 对IOC的理解 依赖的转移的更多相关文章
- 理解依赖注入(DI - Dependency Injection)
系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...
- 理解依赖注入(IOC)和学习Unity
资料1: IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一 ...
- 依赖注入(DI)和控制反转(IOC)的理解,写的太好了。
学习过spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 【转】理解依赖注入(IOC)和学习Unity
IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection).作用:将各层的对象以松耦合的方式组织在一起,解耦,各 ...
- C# 一个初学者对 依赖注入 IOC 的理解( 含 Unity 的使用)
通过 人打电话 来谈谈自己对IOC的理解 版本1.0 public class Person { public AndroidPhone Phone { get; set; } public void ...
- IOC的理解,整合AOP,解耦对Service层和Dal层的依赖
DIP依赖倒置原则:系统架构时,高层模块不应该依赖于低层模块,二者通过抽象来依赖依赖抽象,而不是细节 贯彻依赖倒置原则,左边能抽象,右边实例化的时候不能直接用抽象,所以需要借助一个第三方 高层本来是依 ...
- 学习Unity -- 理解依赖注入(IOC)三种方式依赖注入
IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection).作用:将各层的对象以松耦合的方式组织在一起,解耦,各 ...
- IOC的理解
转载http://www.cnblogs.com/xdp-gacl/p/4249939.html 很不错的文章,虽说是java的,但是.net也通用,所以复制一分,拿来看看挺不错的. 1.1.IoC是 ...
- 谈谈对Spring IOC的理解(转)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
随机推荐
- 协议——SPI
SPI(Serial Peripheral interface)是由摩托罗拉公司定义的一种串行外围设备接口,是一种高速.全双工.同步的通信总线,只需要四根信号线即可,节约引脚,同时有利于PCB的布局. ...
- js注意点
1.在JS中:var a=''; 则 a==0或a==false 结果都为true; 如果是“====” 则为false
- gcc 编译控制选项
gcc 编译控制选项前面已经讲过, gcc 的基本用法是:$ gcc [选项] [文件名]gcc 有很多编译控制选项,使得 gcc 可以根据不同的参数进行不同的编译处理,可供 gcc调用的参数大约有 ...
- IOS - UDID IDFA IDFV MAC keychain
在开发过程中,我们经常会被要求获取每个设备的唯一标示,以便后台做相应的处理.我们来看看有哪些方法来获取设备的唯一标示,然后再分析下这些方法的利弊. 具体可以分为如下几种: UDID IDFA IDFV ...
- java web编程 servlet3
- robot framework笔记(三):扩展SeleniumLibrary库 (自定义关键字)
(一)自定义和浏览器相关的关键字 以下代码GitHub 版本库地址: https://github.com/blairwind/blog_rf SeleniumLibrary的扩展文档中提供了3种增加 ...
- MySQL Index--NOT IN和不等于两类操作无法走索引?
经常被问,NOT IN和<>操作就无法走索引? 真想只有一个:具体问题具体分析,没有前提的问题都是耍流氓. 准备测试数据: ## 删除测试表 DROP TABLE IF EXISTS tb ...
- java对象序列化和反序列化,redis存入和获取对象
最近使用redis发现直接存储序列化后的对象更方便,现提供java序列化和反序列化的代码 1.序列化代码: public static byte[] serialize(Object object) ...
- Redhat下Oracle 12c单节点安装
操作系统:Redhat6.7 64位[root@Oracle12CDB ~]# more /etc/redhat-release Red Hat Enterprise Linux Server rel ...
- Android笔记(三十八) Android中的数据存储——SharedPreferences
SharedPreferences是Android提供的一种轻型的数据存储方法,其本质是基于xml文件存储的,内部数据以key-value的方式存储,通常用来存储一些简单的配置信息. SharedPr ...