C#通用接口。类型T必须可转换为T2才能在通用接口中用作参数

时间:2018-08-20 18:34:24

标签: c#

我有这样的代码:

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”。

问题是:如何解决这个问题以及为什么会发生?

0 个答案:

没有答案