Воскресение мертвых здесь, но это:
........
.ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
Должно быть:
.ExposeConfiguration(c => c.AppendListeners(ListenerType.PreUpdate, new object[]
{
new AuditEventListener()
});
Я полагаю, что метод SetListener (описанный в другом ответе) также удалит всех предыдущих слушателей.
Если вам нравится что-то более динамичное, вы можете сделать это:
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
});
}
});
}
А потом позвоните примерно так:
AddListenerToConfiguration<AuditEventListener>(smFactory,
ListenerType.PreUpdate);
Это позволяет получить более чистый код, пока вы смотрите на конфигурацию Fluent. Это также позволяет легко зарегистрировать один тип для нескольких типов слушателей.
Что касается удаления прослушивателей по умолчанию, я не удалил бы их, если бы у меня не было прослушивателя, который наследует от реализации прослушивателя по умолчанию и вызывает base.METHODNAME для переопределенных методов или реплицирует то же поведение, что и слушатели по умолчанию. 1017 *