我有一个名为MessageRouter的类,接收XML序列化消息对象。XML中包含了它序列化自哪个类型,并且我需要在运行时根据类型调用不同的委托方法,但这些类型直到运行时才会确定,因此我需要实现动态调用。
我希望MessageRouter提供一个名为RegisterDelegateForType的方法,如下所示:
myMessageRouter.RegisterDelegateForType(new Action<MySerializableType>(myActionHandler));
然后将类型或类型的字符串表示存储在像这样的字典中:
Dictionary<Type, Action<T>> registeredDelegates;
这样,我可以像以下伪代码一样调用类型分配的委托并传递反序列化后的对象:
Type xmlSerializedType = TypeFromXmlString(incomingXml);
object deserializedObject = DeserializeObjectFromXml(xmlSerializedType, incomingXml);
// then invoke the action and pass in the deserialized object
registeredDelegates[xmlSerializedType](deserializedObject);
所以我的问题是:
- 如何定义一个字典来包含
Type
作为键和通用的Action<T>
作为值,并使RegisterDelegateForType
方法填充该字典? - 如果不可能,最好的方法是什么?