我的应用程序中有一个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
约束,因为它并不重要。它仅仅是测试代码。