Ressusciter les morts ici, mais ceci:
........
.ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
devrait être:
.ExposeConfiguration(c => c.AppendListeners(ListenerType.PreUpdate, new object[]
{
new AuditEventListener()
});
Je crois que la méthode « SetListener » (décrit dans une autre réponse) supprimerait également tous les auditeurs précédents.
Si vous êtes en quelque chose d'un peu plus dynamique, vous pouvez le faire:
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
});
}
});
}
Et puis appelez quelque chose comme ceci:
AddListenerToConfiguration<AuditEventListener>(smFactory,
ListenerType.PreUpdate);
Cela permet un code plus propre pendant que vous regardez la configuration Fluent. Il vous permet également d'enregistrer facilement un seul type à plusieurs types d'écouteurs. Pour supprimer les écouteurs par défaut, je ne les supprimerais pas à moins qu'un écouteur hérite de l'implémentation de l'écouteur par défaut et appelle base.METHODNAME sur les méthodes surchargées ou réplique le même comportement que celui des écouteurs par défaut.
Soyez très prudent avec ce code. Vous supprimez actuellement les écouteurs d'événement existants au lieu de simplement ajouter les vôtres à la liste. Je viens de découvrir que si j'essaie d'utiliser le verrouillage optimiste dans FluentNH (en utilisant le mappage de Version), cela ne fonctionnera pas car il enregistre automatiquement certains écouteurs d'événements et le code que vous avez fourni les supprime. –
OK, une correction: je remplaçais les mauvais auditeurs pour l'audit. Mais encore ma question demeure: est-il sage de supposer que vous pouvez supprimer tous les écouteurs existants lors de l'appel à ExposeConfiguration? –