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);
}
}
}