为什么此where子句不接受我的输入?

时间:2018-11-21 15:07:13

标签: c# unit-testing generics inheritance

我的应用程序中有一个CommandHandler,它有一个称为TCommand的通用类型参数。该泛型有一个限制:TCommand : ICommand

我有一个测试项目,我在其中测试所有命令处理程序。每个命令处理程序都有一个抽象的测试类,具有一些基本(必需)功能。它具有称为TCommandHandler的通用类型参数。此泛型也有一个限制:TCommandHandler : ICommandHandler<ICommand>。可悲的是,我无法使用它,因为我提供的参数不符合此限制。

这是我的示例:

public interface ICommand
{ }

public class Command : ICommand
{ }

public interface ICommandHandler<in TCommand> where TCommand : ICommand
{
    Task HandleAsync(TCommand command);
}   

public class ExampleCommand : ICommand
{ }

public class ExampleCommandHandler : ICommandHandler<ExampleCommand>
{
    //Implementation..
}

下面是我的测试代码:

// Base test class
public abstract class BaseCommandHandlerTest<TCommandHandler> 
        where TCommandHandler : ICommandHandler<ICommand>
{
    // Stuff here
}

public ExampleCommandHandlerTest : BaseCommandHandlerTest<ExampleCommandHandler>
{
    // Tests here
}

ExampleCommandHandlerTest给我以下错误:

  

类型'ExampleCommandHandler'不能用作通用类型或方法'BaseCommandHandlerTest '中的类型参数'TCommandHandler'。从'AddDecoupledBijlageCommandHandler'到'ICommandHandler '没有隐式引用转换。

我的自变量确实继承自ICommandHandler,自变量的自变量(ExampleCommand)也继承自ICommand

有人可以告诉我我在这里做错了什么以及如何解决这个问题?

如果无法解决问题,我将只使用where TCommandHandler : class约束,因为它并不重要。它仅仅是测试代码。

0 个答案:

没有答案