DatabaseProvider.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using CB.Config;
  5. using CB.Entity;
  6. using CB.Interface;
  7. namespace CB.Data
  8. {
  9. public class DatabaseProvider
  10. {
  11. private DatabaseProvider() { }
  12. static DatabaseProvider() { }
  13. private static Hashtable cacheList = Hashtable.Synchronized(new Hashtable());
  14. private static object lockObject = new object();
  15. private static object LoadDbProvider(string typeName, string interfaceId)
  16. {
  17. try
  18. {
  19. object provider = Activator.CreateInstance(Type.GetType(typeName, false, true), new object[] { interfaceId });
  20. cacheList.Add(typeName, provider);
  21. return provider;
  22. }
  23. catch (Exception ex)
  24. {
  25. throw ex;
  26. }
  27. }
  28. public static T GetDbProvider<T>()
  29. {
  30. string interfaceId = typeof(T).Name;
  31. string keyName = interfaceId;
  32. var Config = DataProviderConfig.GetConfig(keyName);
  33. if (null == Config)
  34. throw new Exception("没有配置接口[" + keyName + "]的实现类!");
  35. keyName = Config.TypeName;
  36. object provider = cacheList[keyName];
  37. if (null == provider)
  38. {
  39. lock (lockObject)
  40. {
  41. provider = cacheList[keyName];
  42. if (null == provider)
  43. {
  44. provider = LoadDbProvider(keyName, interfaceId);
  45. }
  46. }
  47. }
  48. return (T)provider;
  49. }
  50. public static void ResetDbProvider()
  51. {
  52. cacheList.Clear();
  53. }
  54. }
  55. }