示例#1
0
        /// <summary>
        /// 获取数据驱动接口实例
        /// </summary>
        /// <typeparam name="M"></typeparam>
        /// <param name="decryptAlgorithm">解密算法</param>
        /// <returns></returns>
        public static IDbProvider <M> GetDbProvider <M>(IDecryptAlgorithm decryptAlgorithm = null)
            where M : IDbModel, new()
        {
            IDbProvider <M> instance = null;

            Type MT = typeof(M);

            if (!s_dbProviderCache.ContainsKey(MT))
            {
                lock (s_dbProviderKey)
                {
                    if (!s_dbProviderCache.ContainsKey(MT))
                    {
                        //解析数据模型映射接口实例
                        IDbMappingHandler dbMapper = AtomicKernel.Dependency.Resolve <IDbMappingHandler>();
                        if (null == dbMapper)
                        {
                            throw new Exception("未能解析出IDbMappingHandler接口实例");
                        }

                        //获取数据库链接
                        string dbName = dbMapper.GetDatabaseName(typeof(M));
                        ConnectionStringSettings connectionSetting = ConfigurationManager.ConnectionStrings[dbName];
                        if (null == connectionSetting)
                        {
                            throw new Exception("connection 节点中未配置" + dbName);
                        }

                        if (string.IsNullOrEmpty(connectionSetting.ProviderName))
                        {
                            throw new Exception("ProviderName is null,检查检点是否配置了providerName属性");
                        }

                        if (!s_allowDbType.Any(d => d.Equals(connectionSetting.ProviderName)))
                        {
                            throw new Exception("ProviderName is illegal");
                        }


                        //执行解密
                        string connStr = null;
                        if (null == decryptAlgorithm)
                        {
                            connStr = connectionSetting.ConnectionString;
                        }
                        else
                        {
                            connStr = decryptAlgorithm.Decrypt(connectionSetting.ConnectionString);
                        }

                        //开始构造DAL(使用构造函数一)
                        Dictionary <string, object> paramDic = new Dictionary <string, object>
                        {
                            { "dbConnQuery", connStr },
                            { "dbMappingHandler", dbMapper }
                        };

                        instance = AtomicKernel.Dependency.Resolve <IDbProvider <M> >(connectionSetting.ProviderName, paramDic.ToArray());

                        s_dbProviderCache.Add(MT, instance);
                    }
                    else
                    {
                        instance = s_dbProviderCache[MT] as IDbProvider <M>;
                    }
                }
            }
            else
            {
                instance = s_dbProviderCache[MT] as IDbProvider <M>;
            }

            return(instance);
        }
示例#2
0
        /// <summary>
        /// 获取数据驱动接口实例
        /// </summary>
        /// <typeparam name="M"></typeparam>
        /// <param name="dbType">数据库类型 DatabaseType</param>
        /// <param name="conn">数据库连结接口实例</param>
        /// <param name="decryptAlgorithm">解密算法</param>
        /// <returns></returns>
        public static IDbProvider <M> GetDbProvider <M>(string dbType, IDbConnectionString conn, IDecryptAlgorithm decryptAlgorithm = null)
            where M : IDbModel, new()
        {
            IDbProvider <M> instance = null;

            Type MT = typeof(M);

            if (!s_dbProviderCache.ContainsKey(MT))
            {
                lock (s_dbProviderKey)
                {
                    if (!s_dbProviderCache.ContainsKey(MT))
                    {
                        if (!AtomicKernel.Dependency.IsRegistered <IDbProvider <M> >(dbType))
                        {
                            throw new Exception("dbType is illegal");
                        }

                        if (null == conn)
                        {
                            throw new ArgumentNullException("conn");
                        }


                        //解析数据模型映射接口实例
                        IDbMappingHandler dbMapper = AtomicKernel.Dependency.Resolve <IDbMappingHandler>();
                        if (null == dbMapper)
                        {
                            throw new Exception("未能解析出IDbMappingHandler接口实例");
                        }

                        //执行解密
                        string connStr = null;
                        if (null == decryptAlgorithm)
                        {
                            connStr = conn.GetConnection();
                        }
                        else
                        {
                            connStr = decryptAlgorithm.Decrypt(conn.GetConnection());
                        }

                        //开始构造DAL(使用构造函数一)
                        Dictionary <string, object> paramDic = new Dictionary <string, object>
                        {
                            { "dbConnQuery", connStr },
                            { "dbMappingHandler", dbMapper }
                        };

                        instance = AtomicKernel.Dependency.Resolve <IDbProvider <M> >(dbType, paramDic.ToArray());

                        s_dbProviderCache.Add(MT, instance);
                    }
                    else
                    {
                        instance = s_dbProviderCache[MT] as IDbProvider <M>;
                    }
                }
            }
            else
            {
                instance = s_dbProviderCache[MT] as IDbProvider <M>;
            }

            return(instance);
        }