public void Contribute(Configuration configuration)
{
foreach (var eventType in eventTypes)
{
if (!listenersPerEvent.ContainsKey(eventType) || listenersPerEvent[eventType] == null)
continue;
var currentListeners = CollectListeners(eventType);
var listenerInstances = currentListeners.Select(GetInstance);
var replaceExistingListeners = currentListeners.Any(c => c.ReplaceExisting);
var listenersToSet = replaceExistingListeners
? new HashedSet<object>()
: new HashedSet<object>(GetExistingListeners(configuration, eventType));
foreach (var l in listenerInstances.Where(l => listenersToSet.All(o => o.GetType() != l.GetType()))) {
listenersToSet.Add(l);
}
SetListeners(configuration, eventType, new ArrayList(listenersToSet).ToArray(eventType));
}
}