【发布时间】:2018-02-23 15:52:12
【问题描述】:
我正在尝试为命令本身实现具有强类型输入和输出参数的命令模式。
首先我创建了两个接口来标记命令的输入和输出:
interface IRequest { }
interface IResponse { }
然后我创建了基类和接口。这是抽象接收器
interface IReceiver<TRequest, TResponse>
where TRequest : IRequest
where TResponse : IResponse
{
TResponse Action( TRequest request );
}
这是抽象命令
abstract class AbstractCommand<TRequest, TResponse>
where TRequest : IRequest
where TResponse : IResponse
{
protected IReceiver<TRequest, TResponse> _receiver;
public AbstractCommand( IReceiver<TRequest, TResponse> receiver ) {
_receiver = receiver;
}
public abstract TResponse Execute( TRequest request );
}
现在我正在尝试使用这些对象,因此我创建了所需的具体类
class TypeARequest : IRequest
{
public TypeARequest() {
}
public int NumericValueA { get; set; }
public int NumericValueB { get; set; }
}
class TypeAResponse : IResponse
{
public TypeAResponse() {
}
public int Result { get; set; }
}
class SumCommand : AbstractCommand<TypeARequest, TypeAResponse>
{
public SumCommand( IReceiver<TypeARequest, TypeAResponse> receiver ) : base( receiver ) {
}
public override TypeAResponse Execute( TypeARequest request ) {
return _receiver.Action( request );
}
}
class SumReceiver : IReceiver<TypeARequest, TypeAResponse>
{
public TypeAResponse Action( TypeARequest request ) {
return new TypeAResponse() { Result = request.NumericValueA + request.NumericValueB };
}
}
最后我创建了一个 CommandProcessor 类,它应该能够同时处理多个命令
class CommandProcessor
{
IList<AbstractCommand<IRequest, IResponse>> _supportedCommands = new List<AbstractCommand<IRequest, IResponse>>();
public CommandProcessor() {
}
void AddSupportedCommand( AbstractCommand<IRequest, IResponse> item ) {
_supportedCommands.Add( item );
}
void SetupSupportedCommands() {
// ERROR HERE
AddSupportedCommand( new SumCommand( new SumReceiver() ) );
}
}
但是我得到一个编译时错误说:
参数 1:无法从“SumCommand”转换为 '抽象命令'
有什么帮助或建议吗?
【问题讨论】:
标签: c# command-pattern