using System; using System.Collections; using CB.LotteryCatchData.Interface; namespace CB.LotteryCatchData { public class CatchProvider { private CatchProvider() { } private static Hashtable cacheList = Hashtable.Synchronized(new Hashtable()); private static object lockObject = new object(); static CatchProvider() { } private static object LoadProvider(string typeName) { try { object provider = Activator.CreateInstance(Type.GetType(typeName, false, true)); cacheList.Add(typeName, provider); return provider; } catch (Exception ex) { throw ex; } } public static ICatchDataProvider GetProvider(string typeName) { object provider = cacheList[typeName]; if (null == provider) { lock (lockObject) { provider = cacheList[typeName]; if (null == provider) { provider = LoadProvider(typeName); } } } return provider as ICatchDataProvider; } public static void ResetProvider() { cacheList.Clear(); } } }