Mediatr:设置在返回类型为x时拦截的行为

时间:2018-12-31 21:46:00

标签: c# mediatr

在命令成功执行后,我只是想使缓存对象无效。因此,我认为最合适的方法是注册仅在返回类型为InvalidateCacheResponse或从接口IInvalidateCache继承时使用的行为。

也许有一种更优雅的方法可以做到这一点,但这是我认为最好的方法。

我的问题是应该如何设置行为,以便仅在成功返回时才执行,并且仅对类型为InvalidateCacheResponse的对象甚至从接口IInvalidateCache继承的对象(仅实现用于行为)

我已经注册了行为(autofac)

builder.RegisterGeneric(typeof(InvalidateCacheBehavior<,>)).As(typeof(IPipelineBehavior<,>));

行为

 public class InvalidateCacheBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
    where TRequest : IInvalidateCache, IRequest<TRequest> 
{
    private readonly ICacheClient cache;


    public InvalidateCacheBehavior(ICacheClient cache)
    {
        this.cache = cache;

    }

    public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken,
        RequestHandlerDelegate<TResponse> next)
    {

        var response = await next();
        //do some cache invalidation
        return response;

    }
}

命令

public class CreateCoinCommand : IRequest<InvalidateCacheResponse>, IInvalidateCache, IProviderCacheKey

处理程序

public class CreateCoinCommandHandler : IRequestHandler<CreateCoinCommand, InvalidateCacheResponse>

0 个答案:

没有答案