1
我目前正在尝试创建一个类,该类可以将字符串注册为标识符,并将它们与不同类型的枚举进行关联,这些枚举仅在评估时才进行评估,以确保当它被使用时,传递给广播的参数(messageType)是关联的枚举类型的一个实例。将“未知枚举”传递给方法
这工作是这样的:
Diagnostics.RegisterIdentifier("logger", typeof(TestEnum));
Diagnostics.Broadcast("logger", TestEnum.Info, null, "Hello World", null);
这里是我目前拥有的代码,我需要能够验证messageTypesEnum包含在messageTypesFromIdentifier。
private static Dictionary<string, Type> identifierMessageTypeMapping = new Dictionary<string, Type>();
private static List<IListener> listeners = new List<IListener>();
public static void RegisterIdentifier(string identifier, Type messageTypesEnum)
{
if (messageTypesEnum.BaseType.FullName == "System.Enum")
{
identifierMessageTypeMapping.Add(identifier, messageTypesEnum);
}
else
{
throw new ArgumentException("Expected type of messageTypesEnum to derive from System.Enum", "messageTypesEnum");
}
}
public static void Broadcast(string identifier, object messageType, string metaIdentifier, string message, Exception exception)
{
if (identifierMessageTypeMapping.ContainsKey(identifier))
{
Type messageTypesFromIdentifier = identifierMessageTypeMapping[identifier];
foreach (var listener in listeners)
{
DiagnosticsEvent writableEvent = new DiagnosticsEvent(identifier, messageType, metaIdentifier, message, exception);
listener.Write(writableEvent);
}
}
}
如果需要,你可以进一步使用'MethodInfo.MakeGenericMethod'等动态调用泛型方法。 – JoeGeeky 2010-05-20 19:06:11