C#工厂模式(反射,接口,抽象类)
来源:互联网 发布:上市公司捐赠数据 编辑:程序博客网 时间:2024/05/16 12:10
1、反射,接口,具体方法。
流程:UI传递信息到BLL层,BLL首先
IDBHelper dbhelper = ComDBHelper.GetDBHelper();或
private static IMerchantCoupons _accesser =Coupons_Access.CreateMerchantCoupon();
调用发射机制,加载数据库具体操作类的DLL文件实现接口(这里可以调用不同的DLL,实现相同的接口,DB,ORACLE,ACCESS数据库)。
2、反射类:
public static IDBHelper GetDBHelper(DatabaseType dbType)
{
IDBHelper dbhelper = null;
string path = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath;
string dllName = "";
string allPathName = "";
switch (dbType)
{
case DatabaseType.MSSQL:
dllName = "DBSqlHelper.dll";
//已加载
if (assembly != null) {
return dbhelper = (IDBHelper)assembly.CreateInstance("DBSqlHelper.SqlHelper", true, BindingFlags.Default, null, new object[] { "MSSQLConnection" }, null, null);
}
allPathName = path +"/"+ dllName;
if (File.Exists(allPathName))
{
assembly = Assembly.LoadFile(allPathName);
dbhelper = (IDBHelper)assembly.CreateInstance("DBSqlHelper.SqlHelper", true, BindingFlags.Default, null, new object[] { "MSSQLConnection" }, null, null);
}
else
{
throw new Exception("未找到dll插件:" + allPathName + "\n请仔细检查检查(DBSqlHelper.dll)!");
}
break;
case DatabaseType.Oracle:
dllName = "DBOracleHelper.dll";
//已加载
if (assembly != null)
{
return dbhelper = (IDBHelper)assembly.CreateInstance("DBOracleHelper.OrclHelper", true, BindingFlags.Default, null, new object[] { "OracleConnection" }, null, null);
}
allPathName = path +"/"+ dllName;
if (File.Exists(allPathName))
{
assembly = Assembly.LoadFile(allPathName);
dbhelper = (IDBHelper)assembly.CreateInstance("DBOracleHelper.OrclHelper", true, BindingFlags.Default, null, new object[] { "OracleConnection" }, null, null);
}
else
{
throw new Exception("未找到dll插件:" + allPathName + ",请仔细检查检查(DBOracleHelper.dll)!");
}
break;
case DatabaseType.Access:
dllName = "DBAeccessHelper.dll";
//已加载
if (assembly != null)
{
return dbhelper = (IDBHelper)assembly.CreateInstance("DBAccesssHelper.AccHelper", true, BindingFlags.Default, null, new object[] { "AccessConnection" }, null, null);
}
allPathName = path +"/"+ dllName;
if (File.Exists(allPathName))
{
assembly = Assembly.LoadFile(allPathName);
dbhelper = (IDBHelper)assembly.CreateInstance("DBAccesssHelper.AccHelper", true, BindingFlags.Default, null, new object[] { "AccessConnection" }, null, null);
}
else
{
throw new Exception("未找到dll插件:" + allPathName + ",请仔细检查检查(DBAeccessHelper.dll)!");
}
break;
}
return dbhelper;
}
3、加载的文件必须实现接口所有方法。
- C#工厂模式(反射,接口,抽象类)
- 抽象工厂模式+反射
- C#实战反射、事件、抽象工厂、发布订阅模式
- C# 抽象工厂模式
- C#工厂模式-抽象工厂
- 抽象工厂模式+反射+配置文件
- c#工厂模式与抽象工厂模式
- c#工厂模式与抽象工厂模式
- c#工厂模式与抽象工厂模式
- 设计模式---抽象工厂模式+反射+配置文件
- 设计模式之反射+抽象工厂模式
- 反射 + 抽象工厂模式切换DB数据源(附Demo)
- C#抽象工厂模式学习
- C#抽象工厂模式实现
- C# 实现抽象工厂模式
- C#反射和抽象工厂的结合
- 抽象工厂+反射(一)
- 05.抽象工厂模式+反射--AbstractFactory&Reflect
- js高级词法分析
- android NDK开发编译时出现Type 'jint' could not be resolved和Unresolved inclusion: <jni.h>的解决办法
- 基于rs485的modbus 协议
- android Settings 解析
- 基础总结:BroadcastReceiver广播应用详解
- C#工厂模式(反射,接口,抽象类)
- iOS开发UI篇—CAlayer(自定义layer)
- Struts2中使用Validation数据验证
- UITableView删除多行
- iOS开发干货周报第一期
- springmvc put请求无法解析请求体参数解决办法
- git origin和master分析
- 在fragment中调用getSupportActionBar (com.android.support:appcompat-v7)
- UITableView代理方法不执行的原因