我有一個實現命令模式的WCF服務。使用反射,我創建了一個Dictionary,其中鍵是命令類型,值是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返回一個對象,而不是強類型的commandhandler。我需要能夠調用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);
幫助?
是處理程序輸入的內容在理論上是 「T」 的AbstractCommandHandler? – LukeHennerley
您是否嘗試過使用'CreateInstance()'而不是'CreateInstance(Type)'? –
Stijn
CreateInstance仍然需要處理程序的通用參數。 System.Activator.CreateInstance >(handlerType); –
Darthg8r