我有一个实现命令模式的 WCF 服务。使用反射,我创建了一个字典,其中键是命令类型,值是 CommandHandler。这个想法是从 WCF 接收命令,使用字典获取处理程序类型,然后使用激活器创建处理程序的实例。
public CommandResponse RunCommand(Command command)
{
_logger.Trace("Running Command");
var handlerType = HandlerMap[command.GetType()];
var handler = (AbstractCommandHandler<>)Activator.CreateInstance(handlerType);
handler.HandleCommand(command);
return new PostStatCommandResponse();
}
public class StatCommandHandler : AbstractCommandHandler<PostStatCommand>
{
public override void HandleCommand(PostStatCommand command)
{
}
}
问题是 Activator.CreateInstance 返回一个对象,而不是强类型命令处理程序。我需要能够调用 HandleCommand,但不知道如何将其转换为基本 AbstractCommandHandler<>
// Syntax error. Gotta provide type to generic
(AbstractCommandHandler<>)Activator.CreateInstance(handlerType);
// Casting error at run time
(AbstractCommandHandler<Command>)Activator.CreateInstance(handlerType);
// This is dumb and defeats the purpose.
(AbstractCommandHandler<PostStatCommand>)Activator.CreateInstance(handlerType);
帮助?