using System.Linq.Expressions; namespace zero.Routing; public class RoutingPageResolverOptions { HashSet Resolvers { get; set; } = new(); class ResolverMap { public Type Type { get; set; } public Expression> Impl { get; set; } } public void Add(Expression> resolver) { Resolvers.Add(new() { Type = typeof(T), Impl = resolver }); } public void Replace(Expression> resolver) { Remove(); Add(resolver); } public void Remove() { Type type = typeof(T); Resolvers.RemoveWhere(x => x.Type == type); } public Expression> Get() => Get(typeof(T)); public IEnumerable>> GetAll() => GetAll(typeof(T)); public Expression> 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); } }