1、反射的概念在上节博客中已经解释过了,下面我们开始分析业务需求逻辑,再利用反射原理去将其实现;
2、说明:
通常一个项目中只允许去连接一个数据库去操作数据,但是有些过于繁杂的业务就会用到多个数据库之间的交互操作了。
3、看一下项目结构:
4、首先咱们不用反射技术去实现,看一下代码:
咱们在一下示例中以oracle和sqlserver两个数据库为例:
//数据库访问接口类
public interface IDBHelper
{
/// <summary>
/// 新增
/// </summary>
void Create();
/// <summary>
/// 修改
/// </summary>
void Update();
/// <summary>
/// 删除
/// </summary>
void Delete();
/// <summary>
/// 查询
/// </summary>
void Select();
}
//oracle类
public class Oracle:IDBHelper
{
public void Create()
{
Console.WriteLine("Oracle ,新增数据操作!");
}
public void Update()
{
Console.WriteLine("Oracle ,修改数据操作!");
}
public void Delete()
{
Console.WriteLine("Oracle ,删除数据操作!");
}
public void Select()
{
Console.WriteLine("Oracle ,查询数据操作!");
}
}
//sqlserver类
public void Create() {
Console.WriteLine("Sql Server ,新增数据操作!");
}
public void Update()
{
Console.WriteLine("Sql Server ,修改数据操作!");
}
public void Delete()
{
Console.WriteLine("Sql Server ,删除数据操作!");
}
public void Select()
{
Console.WriteLine("Sql Server ,查询数据操作!");
}
控制台代码:
class Program
{
static void Main(string[] args)
{
IDBHelper db = new Sql_Server();//或者IDBHelper db = new Oracle();
db.Create();//新增
db.Update();//修改
db.Delete();//删除
db.Select();//查询
Console.ReadKey();
}
}
运行结果,如图:
这样做的话是实现了业务需求,但是如果要是换库的话就比较麻烦了,就得重新修改写好的代码了,下面我们利用反射的方式去解决这个小bug:
先在app.config里面新添加配置信息:
<appSettings>
<!-- <add key="DataBase.Operation" value="DataBase.Operation,DataBase.Operation.DataBase_Oracle.Oracle"/>-->//此处的信息可以任意修改,不用程序去编译
<add key="DataBase.Operation" value="DataBase.Operation,DataBase.Operation.DataBase_SqlServer.Sql_Server"/>
</appSettings>
我这里就直接上控制台的程序了:
class Program
{
static void Main(string[] args)
{
//获取配置文件中的程序集信息名称
string[] configs = ConfigurationManager.AppSettings["DataBase.Operation"].ToString().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
Assembly assembly = Assembly.Load(configs[0]);//加载程序集
Type t = assembly.GetType(configs[1]);//获取程序集中指定的某一模块的程序信息
object obj_Dbhelper = Activator.CreateInstance(t);//创建实例
IDBHelper db = obj_Dbhelper as IDBHelper;//转换为实例信息
db.Create();//新增
db.Update();//修改
db.Delete();//删除
db.Select();//查询
Console.ReadKey();
}
}
运行效果:
今天关于反射技术的扩展和应用就先做笔记,做到这里了。see you later ~
纯洁的思想,可使最微小的行动高贵起来。