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、加载的文件必须实现接口所有方法。





0 0