ControllerInjector.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace Blue
  5. {
  6. public class ControllerInjector : AbstractArchitectureComponentInjector
  7. {
  8. public ControllerInjector():base(typeof(IController))
  9. {
  10. }
  11. private object[] GetInjectObjects(Type baseType)
  12. {
  13. return GameObject.FindObjectsOfType(baseType, true);
  14. }
  15. public override void Inject(IArchitecture architecture)
  16. {
  17. SetArchitecture(architecture);
  18. Dictionary<Type, List<InjectInfo>> injectionMap = GetInjectionMap();
  19. if (injectionMap == null)
  20. {
  21. return;
  22. }
  23. int injectionCount = injectionMap.Count;
  24. var types = injectionMap.Keys;
  25. if (injectionCount > 0)
  26. {
  27. foreach (Type baseType in types)
  28. {
  29. object[] injectObjects = GetInjectObjects(baseType);
  30. List<InjectInfo> typeInjectInfoList = injectionMap[baseType];
  31. foreach (InjectInfo injectInfo in typeInjectInfoList)
  32. {
  33. if (injectInfo.InjectScope == InjectScope.Prototype)
  34. {
  35. for (int i = 0; i < injectObjects.Length; i++)
  36. {
  37. InjectPrototype(injectObjects[i], injectInfo.InjectField, injectInfo.InjectType);
  38. }
  39. }
  40. else
  41. {
  42. object injectInstance = GetInjectInstance(injectInfo.InjectType);
  43. for (int i = 0; i < injectObjects.Length; i++)
  44. {
  45. InjectSingleton(injectObjects[i], injectInfo.InjectField, injectInstance);
  46. }
  47. }
  48. }
  49. }
  50. }
  51. }
  52. }
  53. }