我正在尝试拥有一个List
开放的泛型类型。是否有可能有类似的东西:
public class MessageProcessor
{
private IDictionary<Type, IMessageHandler<>> _messageHandlers
= new Dictionary<Type, IMessageHandler<>>();
public void AddHandler<TMessage>(IMessageHandler<TMessage> handler)
{
var messageType = typeof(TMessage);
// Add to dictionary here
}
public void Handle<TMessage>(TMessage message)
{
// Call the correct handler here.
}
}
IMessageHandler
应该有一个强类型的方法:
public void Handle(TMessage message) {}
我的真实例子稍微复杂一点,所以我希望我在这里正确地简化了它。
事实是,我对每个处理程序的泛型类型不感兴趣。我只需要将它们全部放在一个地方,如果我可以将它们放在那个地方,我可以轻松找到正确的处理程序。
私有字典将以消息的类型 (TMessage) 作为键。所以我希望能够做到:
// ByteArrayHandler implements IMessageHandler<byte[]>
x.AddHandler(new ByteArrayHandler())
// StringHandler implements IMessageHandler<string>
x.AddHandler(new StringHandler())
x.Handle("Some message");
x.Handle(new byte[] { 1, 2, 3} );
并有MessageProcessor
正确的调用MessageHandler
。