【发布时间】:2013-05-30 02:15:16
【问题描述】:
我必须设计一个 Command/CommandHandler 模块,并且正在为设计的细节而苦苦挣扎。
我创建了一个(空)接口:
public interface ICommand {}
由各种命令实现,
例如
public interface TestCommand : ICommand {}
一个(或多个)CommandHandler 可以注册ICommand 的特定实现。为了避免不断转换,我构建了一个接口:
public interface ICommandHandler<in TCommand>
where TCommand : ICommand
{
void Handle(TCommand command);
}
到目前为止一切顺利...命令调度系统是个麻烦事:命令处理程序应该由 Autofac(或任何其他 DI 系统)注入,例如:
public CommandDispatcher (IEnumerable<ICommandHandler<ICommand>> commandHandlers)
如您所见,这是不可能的。 ICommandHandler<CommandType1> 和 ICommandHandler<CommandType2> 不是从 ICommandHandler<ICommand> 派生的,因此不能放在同一个 IEnumerable 中。
任何建议如何以一种没有问题的方式设计?
【问题讨论】:
标签: c# generics covariance