ArchitectureInjecter.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using System.Diagnostics;
  2. using System.Linq.Expressions;
  3. using System;
  4. namespace Blue
  5. {
  6. /// <summary>
  7. /// Architecture注入类
  8. /// 主要负责四层 Controller、Model、Service、Utility的分别注入
  9. /// </summary>
  10. public class ArchitectureInjecter:IInjector
  11. {
  12. private IArchitectureComponentInjector controllerInjector;
  13. private IArchitectureComponentInjector serviceInjector;
  14. private IArchitectureComponentInjector modelInjector;
  15. private IArchitectureComponentInjector utilityInjector;
  16. /// <summary>
  17. /// ArchitectureInjecter初始化
  18. /// 主要初始化四层 Controller、Model、Service、Utility的注入
  19. /// </summary>
  20. public ArchitectureInjecter()
  21. {
  22. controllerInjector = new ControllerInjector();
  23. serviceInjector = new ServiceInjector();
  24. modelInjector = new ModelInjector();
  25. utilityInjector = new UtilityInjector();
  26. }
  27. public void PrepairInjectionData(Type processtype)
  28. {
  29. PrepairInjectionDataImpl(processtype);
  30. }
  31. /// <summary>
  32. /// 根据传入的类型注入到指定的层注入
  33. /// </summary>
  34. /// <param name="baseType">传入的类型</param>
  35. private void PrepairInjectionDataImpl(Type baseType)
  36. {
  37. if (!TypeChecker.Instance.IsCanInject(baseType))
  38. {
  39. return;
  40. }
  41. if (TypeChecker.Instance.IsController(baseType))
  42. {
  43. PrepairControllerInjectionData(baseType);
  44. }
  45. if (TypeChecker.Instance.IsService(baseType))
  46. {
  47. PrepairServiceInjectionData(baseType);
  48. }
  49. if (TypeChecker.Instance.IsModel(baseType))
  50. {
  51. PrepairModelInjectionData(baseType);
  52. }
  53. if (TypeChecker.Instance.IsUtility(baseType))
  54. {
  55. PrepairUtilityInjectionData(baseType);
  56. }
  57. }
  58. /// <summary>
  59. /// 设置 Architecture
  60. /// Controller、Model、Service、Utility注入分别设置architecture
  61. /// </summary>
  62. public void Inject(IArchitecture architecture)
  63. {
  64. InjectImpl(architecture);
  65. }
  66. /// <summary>
  67. /// 执行与释放或重置非托管资源相关的应用程序定义的任务
  68. /// </summary>
  69. public void Dispose()
  70. {
  71. controllerInjector.Dispose();
  72. serviceInjector.Dispose();
  73. modelInjector.Dispose();
  74. utilityInjector.Dispose();
  75. controllerInjector = null;
  76. serviceInjector = null;
  77. modelInjector = null;
  78. utilityInjector = null;
  79. }
  80. /// <summary>
  81. /// Controller、Model、Service、Utility注入设置architecture
  82. /// </summary>
  83. /// <param name="architecture"></param>
  84. private void InjectImpl(IArchitecture architecture)
  85. {
  86. controllerInjector.Inject(architecture);
  87. serviceInjector.Inject(architecture);
  88. modelInjector.Inject(architecture);
  89. utilityInjector.Inject(architecture);
  90. }
  91. /// <summary>
  92. /// 预注入Controller数据
  93. /// </summary>
  94. private void PrepairControllerInjectionData(Type baseType)
  95. {
  96. controllerInjector.PrepairInjectionData(baseType);
  97. }
  98. /// <summary>
  99. /// 预注入Model数据
  100. /// </summary>
  101. private void PrepairModelInjectionData(Type baseType)
  102. {
  103. modelInjector.PrepairInjectionData(baseType);
  104. }
  105. /// <summary>
  106. /// 预注入Service数据
  107. /// </summary>
  108. private void PrepairServiceInjectionData(Type baseType)
  109. {
  110. serviceInjector.PrepairInjectionData(baseType);
  111. }
  112. /// <summary>
  113. /// 预注入Utility数据
  114. /// </summary>
  115. private void PrepairUtilityInjectionData(Type baseType)
  116. {
  117. utilityInjector.PrepairInjectionData(baseType);
  118. }
  119. }
  120. }