您的位置:首页 > 编程语言 > C#

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();//    }}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐