GlobalContainer.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using log4net;
  5. using Quadarax.Foundation.Common.Object.Bee.Core.Pattern;
  6. using Quadarax.Foundation.Infrastructure.Layers;
  7. namespace Quadarax.Foundation.Infrastructure
  8. {
  9. internal class GlobalContainer : Singleton<GlobalContainer>
  10. {
  11. private GlobalLayer _global;
  12. private ILog _logger;
  13. public GlobalLayer RootLayer => _global;
  14. public GlobalContainer()
  15. {
  16. _logger = LogManager.GetLogger(GetType());
  17. }
  18. public void CreateGlobal<TGlobalLayer>(string globalLayerName,params object[] initialArgs) where TGlobalLayer : GlobalLayer
  19. {
  20. var ctorArgs = new List<object>();
  21. ctorArgs.Add(globalLayerName);
  22. ctorArgs.AddRange(initialArgs);
  23. _global = (GlobalLayer) Activator.CreateInstance(typeof(TGlobalLayer), ctorArgs.ToArray());
  24. }
  25. public string[] GetLayerNames()
  26. {
  27. var names = new List<string>(_global.GetChildLayerNames());
  28. names.Insert(0,_global.Name);
  29. return names.ToArray();
  30. }
  31. public Layer GetLayerByName(string layerName)
  32. {
  33. return _global.Name == layerName ?
  34. _global :
  35. _global.FindChildLayer(layerName).FirstOrDefault();
  36. }
  37. public IEnumerable<TLayer> GetLayer<TLayer>() where TLayer : Layer
  38. {
  39. var layers = new List<TLayer>();
  40. if (_global.GetType() == typeof(TLayer))
  41. layers.Add(_global as TLayer);
  42. layers.AddRange(_global.FindChildLayer<TLayer>());
  43. return layers.ToArray();
  44. }
  45. public string Dump()
  46. {
  47. return _global.Dump();
  48. }
  49. public string DumpContainer()
  50. {
  51. return _global.DumpContainer(true);
  52. }
  53. }
  54. }