UtilityInjector.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. namespace Blue
  3. {
  4. /// <summary>
  5. /// Utility 层注入
  6. /// </summary>
  7. public class UtilityInjector : AbstractArchitectureComponentInjector
  8. {
  9. private Type utilityType;
  10. /// <summary>
  11. /// 获取 IUtility 的类型
  12. /// </summary>
  13. public UtilityInjector():base(typeof(IUtility))
  14. {
  15. utilityType = typeof(IUtility);
  16. }
  17. /// <summary>
  18. /// 根据类型获取注入的Object
  19. /// </summary>
  20. protected override object GetInjectObject(Type baseType)
  21. {
  22. object instance = architectureInstance.GetUtility(baseType);
  23. if (instance == null)
  24. {
  25. var interfaces = baseType.GetInterfaces();
  26. foreach (var type in interfaces)
  27. {
  28. if (utilityType.IsAssignableFrom(type)&&!utilityType.Equals(type))
  29. {
  30. instance = architectureInstance.GetUtility(type);
  31. if (instance != null)
  32. {
  33. break;
  34. }
  35. }
  36. }
  37. }
  38. return instance;
  39. }
  40. }
  41. }