using System; using System.Collections.Generic; using System.Linq; namespace InABox.Core { public interface IAutoEntityUnionGenerator : IAutoEntityGenerator { Type[] Entities { get; } IFilter? Filter(Type type); } public abstract class AutoEntityUnionGenerator : IAutoEntityUnionGenerator { public AutoEntityUnionGenerator() { Configure(); } private Dictionary _entities = new Dictionary(); public Type[] Entities => _entities.Keys.ToArray(); public IFilter? Filter(Type type) => _entities.ContainsKey(type) ? _entities[type] : null; public void Add(Filter filter = null) where TType : TInterface { _entities[typeof(TType)] = filter; } protected abstract void Configure(); public Type Definition => typeof(TInterface); public abstract bool Distinct { get; } } }