在命令成功执行后,我只是想使缓存对象无效。因此,我认为最合适的方法是注册仅在返回类型为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>