← Каталог
ASP.NET - фреймворк для веб-приложений — Где жить логике: Middleware, Endpoint Filters, Policy Pipeline
Фрагмент из «ASP.NET - фреймворк для веб-приложений»: Где жить логике: Middleware, Endpoint Filters, Policy Pipeline.
public interface IPolicy<in TContext>
{
Task<PolicyResult> EvaluateAsync(TContext context, CancellationToken ct);
}
public sealed class PolicyPipeline<TContext>
{
private readonly IEnumerable<IPolicy<TContext>> _policies;
public async Task<PolicyResult> RunAsync(TContext context, CancellationToken ct)
{
foreach (var policy in _policies)
{
var result = await policy.EvaluateAsync(context, ct);
if (!result.Success)
return result;
}
return PolicyResult.Ok();
}
} public interface IPolicy<in TContext>
{
Task<PolicyResult> EvaluateAsync(TContext context, CancellationToken ct);
}
public sealed class PolicyPipeline<TContext>
{
private readonly IEnumerable<IPolicy<TContext>> _policies;
public async Task<PolicyResult> RunAsync(TContext context, CancellationToken ct)
{
foreach (var policy in _policies)
{
var result = await policy.EvaluateAsync(context, ct);
if (!result.Success)
return result;
}
return PolicyResult.Ok();
}
}