2021-11-19 16:11:12 +01:00
|
|
|
namespace zero.Routing;
|
2021-11-19 14:59:24 +01:00
|
|
|
|
|
|
|
|
public class RoutingEndpointOptions
|
|
|
|
|
{
|
|
|
|
|
HashSet<ResolverMap> Resolvers { get; set; } = new();
|
|
|
|
|
|
|
|
|
|
class ResolverMap
|
|
|
|
|
{
|
|
|
|
|
public Type Type { get; set; }
|
2022-01-07 12:47:37 +01:00
|
|
|
public Func<IRouteModel, IRouteEndpoint> Impl { get; set; }
|
2021-11-19 14:59:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2022-01-07 12:47:37 +01:00
|
|
|
public void Add<T>(Func<T, IRouteEndpoint> resolver) where T : class, IRouteModel
|
2021-11-19 14:59:24 +01:00
|
|
|
{
|
|
|
|
|
Resolvers.Add(new()
|
|
|
|
|
{
|
|
|
|
|
Type = typeof(T),
|
|
|
|
|
Impl = obj => resolver(obj as T)
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-07 12:47:37 +01:00
|
|
|
public void Replace<T>(Func<T, IRouteEndpoint> resolver) where T : class, IRouteModel
|
2021-11-19 14:59:24 +01:00
|
|
|
{
|
|
|
|
|
Remove<T>();
|
|
|
|
|
Add(resolver);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Remove<T>() where T : IRouteModel
|
|
|
|
|
{
|
|
|
|
|
Type type = typeof(T);
|
|
|
|
|
Resolvers.RemoveWhere(x => x.Type == type);
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-07 12:47:37 +01:00
|
|
|
public Func<IRouteModel, IRouteEndpoint> Get<T>() where T : IRouteModel => Get(typeof(T));
|
2021-11-19 14:59:24 +01:00
|
|
|
|
2022-01-07 12:47:37 +01:00
|
|
|
public IEnumerable<Func<IRouteModel, IRouteEndpoint>> GetAll<T>() where T : IRouteModel => GetAll(typeof(T));
|
2021-11-19 14:59:24 +01:00
|
|
|
|
2022-01-07 12:47:37 +01:00
|
|
|
public Func<IRouteModel, IRouteEndpoint> Get(Type type)
|
2021-11-19 14:59:24 +01:00
|
|
|
{
|
|
|
|
|
ResolverMap map = Resolvers.LastOrDefault(x => x.Type == type);
|
|
|
|
|
return map?.Impl;
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-07 12:47:37 +01:00
|
|
|
public IEnumerable<Func<IRouteModel, IRouteEndpoint>> GetAll(Type type)
|
2021-11-19 14:59:24 +01:00
|
|
|
{
|
|
|
|
|
IEnumerable<ResolverMap> maps = Resolvers.Where(x => x.Type == type);
|
|
|
|
|
return maps.Select(map => map.Impl).Where(x => x != null);
|
|
|
|
|
}
|
|
|
|
|
}
|