C# 如何实现控制反转(依赖注入)
2017-11-30 16:42
471 查看
控制反转 优点:1、扩展时代码修改最小化。2、组件可热插拔。3、可配置性强。控制反转原理,这里不介绍网上多多。请查看百度控制反转原理,大家都用过实例对象工厂模式如下:
/// <summary> /// 系统配置光雷达厂家类型 /// </summary> /// <returns></returns> public static string SysLidarType() { try { string strlidartype = System.Configuration.ConfigurationManager.AppSettings["SysLidarType"].ToString(); return strlidartype; } catch (Exception ex ) { throw ex; } } /// <summary> ///获取系统配置激光雷达对象实例 /// </summary> /// <returns></returns> public static ReadLidarDataBase GetReadLidarDataInstance() { string syslidartypestr = SysLidarType(); switch (syslidartypestr) { case "LidarData_ZKGD"://中科光电激光雷达 return new LidarData_ZKGD(); case "LidarData_LD"://蓝盾激光雷达 return new LidarData_LD(); default: return new LidarData_LD(); } }以上代码是Web.config 配置那个类型字符串后,来判断生成对应对角实例。没有完全意思的实现代码解耦,如添加一个新的子类是还要在GetReadLidarDataInstance方法中添加代码。为解决以上两个问题,我们采用.Net 中的反射技术来实现控制反转。以下用.Net 中的反射技术,实现可配置生成对象实例,并以单例模式记录到容器列表中.
/// <summary>/// 激光雷达数据解析类列表/// </summary>public static Dictionary<Type, object> Readlidardata = new Dictionary<Type, object>();/// <summary>///获取系统配置激光雷达对象实例/// </summary>/// <returns></returns>public static ReadLidarDataBase GetReadLidarDataInstance(){ReadLidarDataBase ReadLidarInstance = null;Type lidartype = Type.GetType(SysLidarType());if (!Readlidardata.ContainsKey(lidartype)){ReadLidarInstance = (ReadLidarDataBase)Activator.CreateInstance(lidartype, null);Readlidardata.Add(lidartype, ReadLidarInstance);}else{ReadLidarInstance = (ReadLidarDataBase)Readlidardata[lidartype];}return ReadLidarInstance;// string syslidartypestr = SysLidarType();// switch (syslidartypestr)// {// case "LidarData_ZKGD"://中科光电激光雷达// return new LidarData_ZKGD();// case "LidarData_LD"://蓝盾激光雷达// return new LidarData_LD();// default:// return new LidarData_LD();// }}
相关文章推荐
- spring如何实现反转控制
- 用PHP实现简单的控制反转(IOC) 依赖注入(DI),用JSON配置文件
- [.net 面向对象程序设计深入](31)实战设计模式——使用Ioc模式(控制反转或依赖注入)实现松散耦合设计(1)
- 【C#|.NET】从控制反转(依赖注入)想到事件注入 (非AOP)
- C#的接口实现的依赖倒置、控制反转、依赖注入
- 实战设计模式——使用IoC模式(控制反转或依赖注入)实现松散耦合设计(1)
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制之 第二部分
- C#|.NET从控制反转(依赖注入)想到事件注入 (非AOP)
- C# 依赖注入中的 控制反转(Assembly)实现
- 如何理解spring中的IOC(控制反转)、DI(依赖注入)?
- C#开发微信门户及应用(42)--使用Autofac实现微信接口处理的控制反转处理
- 看门外汉如何实现:C#操作 MongoDB基本CURD的事务控制
- C#|.NET从控制反转(依赖注入)想到事件注入 (非AOP)
- Sring控制反转(Inversion of Control,Ioc)也被称为依赖注入(Dependency Injection,DI)原理用反射和代理实现
- 依赖注入(DI)和控制反转(IOC)的详细讲解 spring容器(spring注解实现,而不是xml配置文件)
- Spring 使用注解的方式实现IOC和DI(控制反转和依赖注入)
- C++11之如何实现控制反转
- 【C#|.NET】从控制反转(依赖注入)想到事件注入(非AOP) 推荐
- C#中如何实现传值控制led屏显内容