using System.Collections.Generic; using Runtime.Controller; namespace Controller { public class Controllers : IExecute, IInitialization, ILateExecute, ICleanup { private readonly List _initializeControllers; private readonly List _executeControllers; private readonly List _lateControllers; private readonly List _cleanupControllers; public Controllers() { _initializeControllers = new List(); _executeControllers = new List(); _lateControllers = new List(); _cleanupControllers = new List(); } internal Controllers Add(IController controller) { if (controller is IInitialization initializeController) { _initializeControllers.Add(initializeController); } if (controller is IExecute executeController) { _executeControllers.Add(executeController); } if (controller is ILateExecute lateExecuteController) { _lateControllers.Add(lateExecuteController); } if (controller is ICleanup cleanupController) { _cleanupControllers.Add(cleanupController); } return this; } public void Execute() { _executeControllers.ForEach(x => x.Execute()); } public void Init() { _initializeControllers.ForEach(x=> x.Init()); } public void LateExecute() { _lateControllers.ForEach(x => x.LateExecute()); } public void Cleanup() { _cleanupControllers.ForEach(x => x.Cleanup()); } } }