2010-05-20 5 views
1

저는 현재 문자열을 식별자로 등록하고 다른 유형의 열거 형에 연결할 수있는 클래스를 만들기 위해 노력하고 있습니다.이 열거 형은 너무 많은 경우에만 평가됩니다. 사용되는 경우 브로드 캐스트에 전달 된 매개 변수 (messageType)는 연결된 Enum Type의 인스턴스입니다.메서드에 "알 수없는 열거 형"을 전달합니다.

이 이런 식으로 뭔가를 작동합니다 :

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); 
      } 
     } 
    } 

답변

1

당신이하려는 일에 유용 할 수 있습니다. 그런 다음 호출을 같이 결합 할 수 있습니다.

Diagnostics.Broadcast<TestEnum>("logger", TestEnum.Info, null, "Hello World", null); 
+0

필요한 경우 'MethodInfo.MakeGenericMethod'등을 사용하여 추가로 일반 메서드를 동적으로 호출 할 수 있습니다. – JoeGeeky

관련 문제