我有这样的代码:
public interface IRequest<out TResponse>
{
}
public interface IPagedRequest<out TResponse> : IRequest<IPagedList<TResponse>>
{
int Page { get; set; }
int PageSize { get; set; }
}
public interface IRequestHandler<in TRequest, TResponse> where TRequest : class, IRequest<TResponse>
{
Task<TResponse> HandleAsync(TRequest request, CancellationToken cancellationToken = default(CancellationToken));
}
public interface IPagedList<out T> : IEnumerable<T>
{
//...
}
我需要为IRequestHandler创建装饰器来处理所有IPagedRequest。所以我写道:
public class PagedRequestHandler<TRequest, TResponse> : IRequestHandler<TRequest, TResponse>
where TRequest : class, IPagedRequest<TResponse>
{
// ...
}
并且这些代码不起作用,因为:“类型TRequest必须可转换为IRequest才能在通用接口IRequestHandler中用作参数TRequest”。
问题是:如何解决这个问题以及为什么会发生?