ModelInjector.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. namespace Blue
  3. {
  4. /// <summary>
  5. /// Model 层注入
  6. /// </summary>
  7. public class ModelInjector : AbstractArchitectureComponentInjector
  8. {
  9. private Type modelType;
  10. /// <summary>
  11. /// 获取 IModel 的类型
  12. /// </summary>
  13. public ModelInjector() : base(typeof(IModel)) {
  14. modelType = typeof(IModel);
  15. }
  16. /// <summary>
  17. /// 根据类型获取注入的Object
  18. /// </summary>
  19. protected override object GetInjectObject(Type baseType)
  20. {
  21. object instance = architectureInstance.GetModel(baseType);
  22. if (instance == null)
  23. {
  24. var interfaces = baseType.GetInterfaces(); // 当在派生类中重写时,获取由当前 Type 实现或继承的所有接口
  25. foreach (var type in interfaces)
  26. {
  27. if (modelType.IsAssignableFrom(type)&&!modelType.Equals(type)) // 确定指定类型 type 的实例是否能分配给当前类型的变量
  28. {
  29. instance = architectureInstance.GetModel(type);
  30. if (instance != null)
  31. {
  32. break;
  33. }
  34. }
  35. }
  36. }
  37. return instance;
  38. }
  39. }
  40. }