Resucitando a los muertos aquí, pero esto:
........
.ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
debe ser:
.ExposeConfiguration(c => c.AppendListeners(ListenerType.PreUpdate, new object[]
{
new AuditEventListener()
});
Creo que el método de 'setListener' (que se describe en otra respuesta) también eliminaría todos los oyentes anteriores.
Si usted está en algo un poco más dinámico, se puede hacer esto:
private void AddListenerToConfiguration<T>(FluentConfiguration config, params ListenerType[] typesForListener)
where T : class
{
var listener = Activator.CreateInstance<T>();
config.ExposeConfiguration(x =>
{
foreach (var listenerType in typesForListener)
{
x.AppendListeners(listenerType, new T[]
{
listener
});
}
});
}
y luego llamar a algo como esto:
AddListenerToConfiguration<AuditEventListener>(smFactory,
ListenerType.PreUpdate);
Esto permite un código más limpio, mientras que usted está mirando la configuración Fluent. También le permite registrar fácilmente un solo tipo en múltiples tipos de oyentes.
En cuanto a eliminar los oyentes predeterminados, no los eliminaría a menos que tenga un oyente que herede de la implementación de escucha predeterminada y llame a base.METHODNAME en los métodos reemplazados o replique el mismo comportamiento que los oyentes predeterminados.
Tenga mucho cuidado con ese código. En realidad, está eliminando los detectores de eventos existentes en lugar de solo agregar los suyos a la lista. Acabo de descubrir que si trato de utilizar el bloqueo optimista en FluentNH (utilizando el mapeo de versión), no funcionará porque registra automáticamente algunos oyentes de eventos por sí mismo y el código que proporcionó los elimina. –
OK, una corrección: estaba anulando a los oyentes equivocados para la auditoría. Pero aún queda mi pregunta: ¿es prudente suponer que puede eliminar cualquier oyente existente al llamar a ExposeConfiguration? –