Is it possible to register multiple event listeners?
We currently register event listeners using .ExposeConfiguration(AddSoftDelete) in which AddSoftDelete is a class registering the listener;
private static void AddSoftDelete(Configuration config)
{
config.SetListener(ListenerType.Delete, new SoftDeleteListener());
}
We have found that we cannot register multiple event listeners of the same type, i.e. we cannot register more than one listener for “ListenerType.Delete”.
Is it possible to register new listeners without overriding any existing ones?
Solved…
Have managed to register multiple listeners using the following code;
config.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[]
{
new Listener1(),
new Listener2()
};
Repeat for each ListenerType.
The listeners are not actually listeners, they are implementors. There could only be one implementation of an “event”.
You could implement a listener where you could plug in several implementations. For instance an implementation for different entity types. You could pass the “event” to each implementation until one of them handles it (eg. when the
ISoftDeletableinterface is implemented, theSoftDeleteImplementoris handling it). You need to care about competing implementors (more the one could be handling it, the order matters in which you call them).