namespace zero.Routing; public class RoutingEndpointOptions { HashSet Resolvers { get; set; } = new(); class ResolverMap { public Type Type { get; set; } public Func Impl { get; set; } } public void Add(Func resolver) where T : class, IRouteModel { Resolvers.Add(new() { Type = typeof(T), Impl = obj => resolver(obj as T) }); } public void Replace(Func resolver) where T : class, IRouteModel { Remove(); Add(resolver); } public void Remove() where T : IRouteModel { Type type = typeof(T); Resolvers.RemoveWhere(x => x.Type == type); } public Func Get() where T : IRouteModel => Get(typeof(T)); public IEnumerable> GetAll() where T : IRouteModel => GetAll(typeof(T)); public Func Get(Type type) { ResolverMap map = Resolvers.LastOrDefault(x => x.Type == type); return map?.Impl; } public IEnumerable> GetAll(Type type) { IEnumerable maps = Resolvers.Where(x => x.Type == type); return maps.Select(map => map.Impl).Where(x => x != null); } }