机房重构遇到了反射+配置文件,查了一些资料,接下来了解一下
1.什么是反射:
Reflection,中文翻译为反射。 这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息。
2.反射的作用:
在.Net Framework中提供了反射机制,可以在加载程序运行时,动态的获取和加载程序集(dll也就是动态链接库),获取程序集的信息,可以对程序集的类进行实例化,调用类中的方法。也就是说,在.Net Framework中提供了反射机制,可以在加载Factory层运行时,动态的获取和加载DAL层(dll也就是动态链接库),获取DAL层的信息,可以对DAL层的类进行实例化,调用DAL层类中的方法等。
3.代码实例:
配置文件:
这里有两个键值对,key值value值
第二对key,value值对应sqlHelper中的代码,可以看出从配置文件获取的字符串connstr对应配置文件的key值
ConfigurationManager:读取配置文件
AppSettings:获取配置文件数据
ConnStr:连接字符串
工厂层:
配置文件中的第一对key,value值对应工厂层的代码,DB对应key值,StrDB对应value值
StrDB +"." + "CheckDAL" =DAL.CheckDAL
4.Assembly类
在程序中,如果我们要动态加载一个程序集怎么办呢?有几种方式可以使用,分别是Load,LoadFrom和LoadWithPartialName三个Assembly的静态方法.主要说一下Load方法
Assembly.Load()方法,该方法会有多个重载版本,其中一个就是提供程序集的详细信息,即程序集的标识,包括程序集的名称,版本,区域信息,公有密钥标记,全部都是以一个字符串的形式提供;
关于反射Assembly.Load("程序集").CreateInstance("命名空间.类")
而不管在哪一层写这段代码其中的("程序集")读取的实际是web层bin文件夹下的dll,也就是说你反射的类的程序集dll在web层的bin下必须有
注意CreateInstance()一定是命名空间.类名,否则创建的实例为空
Assembly.Load("程序集名")