Непонятная реализация EventAggregator - C#
Формулировка задачи:
В чем глубокий смысл lables в данной реализации агрегатора событий?
public class EventContainer
{
private Dictionary<Type, List<Action<object>>> subscribers = new Dictionary<Type, List<Action<object>>>();
private Dictionary<object, Action<object>> lables = new Dictionary<object, Action<object>>();
public Dictionary<Type, List<Action<object>>> Subscribers
{
get { return subscribers; }
}
public void Subscribe<T>(Action<T> e)
{
List<Action<object>> l;
if (!subscribers.TryGetValue(typeof(T), out l))
{
l = new List<Action<object>>();
subscribers.Add(typeof(T), l);
}
Action<object> a =
delegate(object o) { e((T) o); };
lables.Add( e, a);
l.Add(a);
}
public void UnSubscribe<T>(Action<T> e)
{
if (lables.ContainsKey(e))
{
List<Action<object>> l;
if (subscribers.TryGetValue(typeof(T), out l))
{
l.Remove(lables[e]);
lables.Remove(e);
}
}
}
public void Event<T>( T arg )
{
List<Action<object>> actions;
if (subscribers.TryGetValue(typeof(T), out actions))
{
foreach (Action<object> act in actions)
{
act(arg);
}
}
}
}Решение задачи: «Непонятная реализация EventAggregator»
textual
Листинг программы
if (lables.ContainsKey(e))
{ ....