using System; using System.Collections; using System.Collections.Generic; using CB.Config; using CB.Entity; using CB.Interface; namespace CB.Data { public class DatabaseProvider { private DatabaseProvider() { } static DatabaseProvider() { } private static Hashtable cacheList = Hashtable.Synchronized(new Hashtable()); private static object lockObject = new object(); private static object LoadDbProvider(string typeName, string interfaceId) { try { object provider = Activator.CreateInstance(Type.GetType(typeName, false, true), new object[] { interfaceId }); cacheList.Add(typeName, provider); return provider; } catch (Exception ex) { throw ex; } } public static T GetDbProvider() { string interfaceId = typeof(T).Name; string keyName = interfaceId; var Config = DataProviderConfig.GetConfig(keyName); if (null == Config) throw new Exception("没有配置接口[" + keyName + "]的实现类!"); keyName = Config.TypeName; object provider = cacheList[keyName]; if (null == provider) { lock (lockObject) { provider = cacheList[keyName]; if (null == provider) { provider = LoadDbProvider(keyName, interfaceId); } } } return (T)provider; } public static void ResetDbProvider() { cacheList.Clear(); } } }