using System.Diagnostics; using System.Linq.Expressions; using System; namespace Blue { /// /// Architecture注入类 /// 主要负责四层 Controller、Model、Service、Utility的分别注入 /// public class ArchitectureInjecter:IInjector { private IArchitectureComponentInjector controllerInjector; private IArchitectureComponentInjector serviceInjector; private IArchitectureComponentInjector modelInjector; private IArchitectureComponentInjector utilityInjector; /// /// ArchitectureInjecter初始化 /// 主要初始化四层 Controller、Model、Service、Utility的注入 /// public ArchitectureInjecter() { controllerInjector = new ControllerInjector(); serviceInjector = new ServiceInjector(); modelInjector = new ModelInjector(); utilityInjector = new UtilityInjector(); } public void PrepairInjectionData(Type processtype) { PrepairInjectionDataImpl(processtype); } /// /// 根据传入的类型注入到指定的层注入 /// /// 传入的类型 private void PrepairInjectionDataImpl(Type baseType) { if (!TypeChecker.Instance.IsCanInject(baseType)) { return; } if (TypeChecker.Instance.IsController(baseType)) { PrepairControllerInjectionData(baseType); } if (TypeChecker.Instance.IsService(baseType)) { PrepairServiceInjectionData(baseType); } if (TypeChecker.Instance.IsModel(baseType)) { PrepairModelInjectionData(baseType); } if (TypeChecker.Instance.IsUtility(baseType)) { PrepairUtilityInjectionData(baseType); } } /// /// 设置 Architecture /// Controller、Model、Service、Utility注入分别设置architecture /// public void Inject(IArchitecture architecture) { InjectImpl(architecture); } /// /// 执行与释放或重置非托管资源相关的应用程序定义的任务 /// public void Dispose() { controllerInjector.Dispose(); serviceInjector.Dispose(); modelInjector.Dispose(); utilityInjector.Dispose(); controllerInjector = null; serviceInjector = null; modelInjector = null; utilityInjector = null; } /// /// Controller、Model、Service、Utility注入设置architecture /// /// private void InjectImpl(IArchitecture architecture) { controllerInjector.Inject(architecture); serviceInjector.Inject(architecture); modelInjector.Inject(architecture); utilityInjector.Inject(architecture); } /// /// 预注入Controller数据 /// private void PrepairControllerInjectionData(Type baseType) { controllerInjector.PrepairInjectionData(baseType); } /// /// 预注入Model数据 /// private void PrepairModelInjectionData(Type baseType) { modelInjector.PrepairInjectionData(baseType); } /// /// 预注入Service数据 /// private void PrepairServiceInjectionData(Type baseType) { serviceInjector.PrepairInjectionData(baseType); } /// /// 预注入Utility数据 /// private void PrepairUtilityInjectionData(Type baseType) { utilityInjector.PrepairInjectionData(baseType); } } }