using System.Collections.Generic; using System.Linq; using System.Security.Permissions; namespace BITKit { public class MainProcessor : IMainProcessor { private readonly List> _processors = new(); public void AddProcessor(IProcessor processor) => _processors.Add(processor); public void RemoveProcessor(IProcessor processor) => _processors.Remove(processor); public T Process(T source) { return _processors.Aggregate(source, (current1, processor) => processor.Process(source, current1)); } } public class Processor : IProcessor { public T Process(T source, T current) { return current; } } public class MainProcessor : IMainProcessor { private readonly List> _processors = new(); public void AddProcessor(IProcessor processor) => _processors.Add(processor); public void RemoveProcessor(IProcessor processor) => _processors.Remove(processor); public T Process(T source, T1 arg) { return _processors.Aggregate(source, (current, processor) => processor.Process(source, current, arg)); } } }