1.我的随笔
简单工厂模式、反射 都有写到一些反射
2.设计一个可配置是sql Helper
这里只说明一下反射的大体框架
写一个接口,定义插入和更新操作
namespace ConsoleApp1 { public interface IDBHelper { void insert(); void update(); } }
1)类库DB.Mysql定义一个DBHelper
namespace DB.MySql { public class DBHelper : IDBHelper { public void insert() { Console.WriteLine("Mysql insert"); } public void update() { Console.WriteLine("Mysql update"); } } }
指定生成文件的位置,为了方便操作,我们存在在执行exe的目录里面(文件夹会自动生成,不需要我们自己新建,定义好输出路径就行)
定义输出路径
..ConsoleApp1inDebugDB.MySql
2)同理,Oracle的操作也一样
类库DB.Oracle定义一个DBHelper
public class DBHelper : IDBHelper { public void insert() { Console.WriteLine("Oracle insert"); } public void update() { Console.WriteLine("Oracle update"); } }
定义输出路径
..ConsoleApp1inDebugDB.Oracle
3)主程序
namespace ConsoleApp1 { class Program { static string db = ConfigurationManager.AppSettings["db"]; static void Main(string[] args) { Assembly assembly = Assembly.LoadFile(DllPath());//反射的入口 IDBHelper helper = (IDBHelper)Activator.CreateInstance(assembly.GetType($"{db}.DBHelper")); helper.insert(); Console.ReadLine(); } /// <summary> /// 加载dll路径 /// </summary> /// <returns></returns> static string DllPath() { var path = Application.ExecutablePath; //var serviceName = new FileInfo(path).Name; var serviceDirectory = new FileInfo(path).Directory; return $@"{serviceDirectory}{db}{db}.dll"; } } }
主程序配置文件
<appSettings> <add key="db" value="DB.MySql"/> </appSettings>