wskrzesza zmarłych tu jednak:
........
.ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
Powinno być:
.ExposeConfiguration(c => c.AppendListeners(ListenerType.PreUpdate, new object[]
{
new AuditEventListener()
});
Wierzę, że metoda "SetListener" (opisana w innej odpowiedzi) również usunie wszystkich poprzednich słuchaczy.
Jeśli do czegoś trochę bardziej dynamiczny, można to zrobić:
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
});
}
});
}
a następnie wywołać coś takiego:
AddListenerToConfiguration<AuditEventListener>(smFactory,
ListenerType.PreUpdate);
Pozwala to na czystszego kodu podczas gdy patrzysz konfiguracja płynna. Pozwala także łatwo zarejestrować jeden typ dla wielu typów słuchaczy.
Jeśli chodzi o usuwanie domyślnych programów nasłuchujących, nie będę ich usuwać, chyba że mam odbiornik, który dziedziczy z domyślnej implementacji detektora i wywołuje base.METHODNAME na zastąpionych metodach lub replikuje to samo zachowanie, co domyślne detektory.
Należy bardzo uważać na ten kod. W rzeczywistości usuwasz istniejące detektory zdarzeń, zamiast tylko dodawać własne do listy. Właśnie odkryłem, że jeśli spróbuję użyć optymistycznego blokowania w FluentNH (używając odwzorowania wersji), to nie zadziała, ponieważ automatycznie rejestruje niektóre detektory zdarzeń samodzielnie, a podany kod je usuwa. –
OK, korekta: nadpisałem niewłaściwych słuchaczy do audytu. Ale wciąż pozostaje moje pytanie: czy mądrze jest założyć, że można usunąć istniejących słuchaczy podczas wywoływania ExposeConfiguration? –