/// <summary>
/// Provides the abstract for registring the listener within the configuration
/// </summary>
public abstract class RegistrableListener
{
/// <summary>
/// Registers the listener within the config depending on the type of the listener inheriting this class
/// </summary>
/// <param name="configuration"></param>
public void Register(Configuration configuration)
{
EventListeners listeners = configuration.EventListeners;
//If the listener is IFlushEntityEventListener
var asFlushEntityEventListener = this as IFlushEntityEventListener;
if (asFlushEntityEventListener != null)
{
listeners.FlushEntityEventListeners = new[] { asFlushEntityEventListener }
.Concat(listeners.FlushEntityEventListeners)
.ToArray();
}
//If the listener is ISaveOrUpdateEventListener
var asSaveOrUpdateEventListener = this as ISaveOrUpdateEventListener;
if (asSaveOrUpdateEventListener != null)
{
//Update SaveEventListeners
listeners.SaveEventListeners = new[] { asSaveOrUpdateEventListener }
.Concat(listeners.SaveEventListeners)
.ToArray();
//Update UpdateEventListeners
listeners.UpdateEventListeners = new[] { asSaveOrUpdateEventListener }
.Concat(listeners.UpdateEventListeners)
.ToArray();
//Update SaveOrUpdateEventListeners
listeners.SaveOrUpdateEventListeners = new[] { asSaveOrUpdateEventListener }
.Concat(listeners.SaveOrUpdateEventListeners)
.ToArray();
}
//If the listener is IMergeEventListener
var asMergeEventListener = this as IMergeEventListener;
if (asMergeEventListener != null)
{
listeners.MergeEventListeners = new[] { asMergeEventListener }
.Concat(listeners.MergeEventListeners)
.ToArray();
}
//If the listener is IPreInsertEventListener
var asPreInsertEventListener = this as IPreInsertEventListener;
if (asPreInsertEventListener != null)
{
listeners.PreInsertEventListeners = new[] { asPreInsertEventListener }
.Concat(listeners.PreInsertEventListeners)
.ToArray();
}
}
}