2013-06-10 2 views
2

C# 콜백 핸들러 보낸 사람을 감지하는 방법, 그 다음 내가 컨트롤러가 노출 몇 가지 이벤트를 등록, 이벤트 콜백 핸들러는 서명입니다 :내가 제 3 자 API에서 일부 컨트롤러를받을

public delegate void SomeCallbackFromAPI(Guid threadId, int someInt) 

이 나를 위해 충분하지 않습니다 , 나는 내가 보유한 컨트롤러 목록에서이 컨트롤러를 식별해야하고 콜백이 컨트롤러를 인식 할 수있는 다른 유효한 ID를 제공하지 않기 때문에 발신자도 수신하고 싶습니다.

나는 이걸 호출 할 때를 알고 있고, 보낸 사람이라면 컨트롤러 유형으로 전송할 수 있습니다.

콜백 발신자를 얻을 수있는 방법이 있습니까?

감사합니다.

답변

0

이것은 불가능합니다. 대리자가 호출되면 일반 메서드 호출과 마찬가지로 호출자가 매개 변수로 전달되지 않으면 EventHandler<T>과 같이 가져올 수 없습니다.

0

대리인은 MethodTarget을 포함합니다. 델리게이트를 등록 할 때 구독하고있는 컨트롤러를 알고 있다면 델리게이트의 대상에 필요한 정보를 포함시킬 수 있습니다.

namespace So17022438CallbackHandlers 
{ 
    delegate void ApiCallback (Guid threadId, int param); 

    class Program { 
     class Handler { 
      public string Name; 
      public ApiCallback Callback; 

      public Handler (string name) 
      { 
       Name = name; 
       Callback = (id, param) => OnApiCallback(Name, param); 
      } 
     } 

     static void Main (string[] args) { 
      var apis = new[] { new Api(), new Api() }; 
      apis[0].RegisterCallback(new Handler("Name1").Callback); 
      apis[1].RegisterCallback(new Handler("Name2").Callback); 
      apis[0].CallCallback(); 
      apis[1].CallCallback(); 
      Console.ReadKey(); 
     } 

     static void OnApiCallback (string name, int param) { 
      Console.WriteLine(name + " - " + param); 
     } 
    } 

    class Api { 
     private ApiCallback _callback; 

     public void RegisterCallback (ApiCallback callback) { 
      _callback = callback; 
     } 

     public void CallCallback() { 
      _callback(new Guid(), 1); 
     } 
    } 
} 

편집 :는 사실, 클래스가 필요, 그것은 폐쇄와 단독으로 수행 할 수 없습니다. :)

관련 문제