Files
mixtape/zero.Core/Options/RoutingPageResolverOptions.cs
T

58 lines
1.3 KiB
C#
Raw Normal View History

2021-02-23 15:50:33 +01:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using zero.Core.Entities;
namespace zero.Core.Options
{
public class RoutingPageResolverOptions
{
HashSet<ResolverMap> Resolvers { get; set; } = new();
class ResolverMap
{
public Type Type { get; set; }
2021-05-04 17:23:52 +02:00
public Expression<Func<Page, bool>> Impl { get; set; }
2021-02-23 15:50:33 +01:00
}
2021-05-04 17:23:52 +02:00
public void Add<T>(Expression<Func<Page, bool>> resolver)
2021-02-23 15:50:33 +01:00
{
Resolvers.Add(new()
{
Type = typeof(T),
Impl = resolver
});
}
2021-05-04 17:23:52 +02:00
public void Replace<T>(Expression<Func<Page, bool>> resolver)
2021-02-23 15:50:33 +01:00
{
Remove<T>();
Add<T>(resolver);
}
public void Remove<T>()
{
Type type = typeof(T);
Resolvers.RemoveWhere(x => x.Type == type);
}
2021-05-04 17:23:52 +02:00
public Expression<Func<Page, bool>> Get<T>() => Get(typeof(T));
2021-02-23 15:50:33 +01:00
2021-05-04 17:23:52 +02:00
public IEnumerable<Expression<Func<Page, bool>>> GetAll<T>() => GetAll(typeof(T));
2021-02-23 15:50:33 +01:00
2021-05-04 17:23:52 +02:00
public Expression<Func<Page, bool>> Get(Type type)
2021-02-23 15:50:33 +01:00
{
ResolverMap map = Resolvers.LastOrDefault(x => x.Type == type);
return map?.Impl;
}
2021-05-04 17:23:52 +02:00
public IEnumerable<Expression<Func<Page, bool>>> GetAll(Type type)
2021-02-23 15:50:33 +01:00
{
IEnumerable<ResolverMap> maps = Resolvers.Where(x => x.Type == type);
return maps.Select(map => map.Impl).Where(x => x != null);
}
}
}