J'essaie actuellement de créer une classe qui peut enregistrer des chaînes comme identificateurs et les associer à différents types d'énumérations, ces énumérations étant évaluées seulement dans une mesure telle que je m'assure que quand il est utilisé, le paramètre transmis à broadcast (messageType) est une instance du type Enum associé.en passant une "énumération inconnue" à une méthode
Cela fonctionnerait quelque chose comme ceci:
Diagnostics.RegisterIdentifier("logger", typeof(TestEnum));
Diagnostics.Broadcast("logger", TestEnum.Info, null, "Hello World", null);
est ici le code que j'ai actuellement, je dois être en mesure de vérifier que messageTypesEnum est contenu dans 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);
}
}
}
Si nécessaire, vous pouvez aller plus loin et invoquer la méthode générique dynamiquement en utilisant 'MethodInfo.MakeGenericMethod' et ainsi de suite. – JoeGeeky