版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csxypr/article/details/75804603
之前在学习设计模式的时候,对于抽象工厂中的反射+配置文件的使用一直都是一知半解的,但是在机房重构七层登录的运用以及报错,让自己对于反射
的使用有了更深刻的认识。
反射就像是一个简单的记录+反射器,将配置文件中的内容反射到当前所要运用的内容中来。
反射的运用格式:
Assembly.Load(“程序集名称”).CreateInstance(“命名空间.类名称”)
话不多说,先上代码:
配置文件:App.config 【在U层中】
代码:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key ="ConStr" value ="server=.;database=CRRData;uid=sa;password=123456"/>
<add key ="DB" value ="SQLserver"/>
</appSettings>
</configuration>
反射:【Factory层】
代码:
namespace Factory
{
public class LoginFactory
{
string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"]; //接收来自配置文件的数据
public IDAL.LoginIDAL CreateUser()
{
//string ClassName = "DAL"+ "."+StrDB + "LoginDAL"; //DAL层的类名
string ClassName = "DAL" + "." + "LoginDAL";
return (IDAL.LoginIDAL)Assembly.Load("LoginDAL").CreateInstance(ClassName); //反射+工厂的应用
}
}
}
当然在使用反射前,要先引用System.Reflection的命名空间。
在机房重构中,反射代码中的“程序集名称”为D层的程序集名称,D层为数据访问层。利用反射+配置文件就是想要实现数据访问程序。这时你输入的用户
名和密码就会进入到D层,查询数据内容。
如果你想要更换数据库,该如何做呢?
很简单,只要更改一下配置文件中的“SQLserver”内容,改为“Access”或者“Oracle”
在反射中,StrDB为一个变量,所以只要在D层添加一个对应名称的类即可。
反射中的代码图示:
对应的D层类名:
学无止境,在不断地实践中成长。这篇博客还有不足之处,希望大家能够一一指出,不吝赐教。