2010-07-30 51 views
0

我有相同(簽名明智)事件(25+)的列表:如何將對象中的所有事件動態綁定到EventHandler?

public class SourceOfManyEvents {  

    public event Action<EventInfo> FirstEvent = delegate { }; 
    public event Action<EventInfo> SecondEvent = delegate { }; 
    {...} 
} 

我知道更多的事件將被添加到堂課下來使用相同簽名的道路。我熱衷於做一些記錄,當事件觸發,所以我要綁定所有事件到一個記錄的事件處理程序是這樣的:

// PSEUDO-CODE WARNING! :D 
// PSEUDO-CODE WARNING! :D 
// PSEUDO-CODE WARNING! :D 

public void BindToAllEvents(SourceOfManyEvents source) {  

    var events = typeof(SourceOfManyEvents).GetEvents(); 

    foreach (var e in events) { 
     e.BindToEvent(source, GenericEventHandler); 
    } 
} 

public void GenericEventHandler(EventInfo info) { 
    // do some logging here 
} 

有沒有辦法實現這個使用.NET 4中& C#?

+0

你控制那的射擊事件的對象? – 2010-07-30 12:58:00

+0

你可能想看看PostSharp。 – 2010-07-30 12:59:21

+0

是的,在這種情況下,我控制了對象,但我很想了解如何以兩種方式執行此操作......因爲在不能控制對象的不同項目中也有類似的情況。 – InvertedAcceleration 2010-07-30 13:02:33

回答

2

是這樣的嗎?

public static void GenericEventHandler(EventInfo info) 
    { 
     // do some logging here 
    } 

    public static void Bind(SourceOfManyEvents s) 
    { 
     foreach (var e in typeof(SourceOfManyEvents).GetEvents()) 
     { 
      e.AddEventHandler(s, (Action<EventInfo>)GenericEventHandler); 
     } 
    } 
0

這是肯定可能的,你也可能不得不用反射來做到這一點。 我不是完全地肯定這是正確的,因爲它已經有一段時間,因爲我使用反射,但我會嘗試這個辦法:

var events = typeof(SourceOfManyEvents).GetEvents(); 
foreach (var e in events) { 
    e.AddEventHandler(source, (Action<EventInfo>) GenericEventHandler); 
} 
相關問題