复活死在这里,但这样的:
........
.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,或者复制与默认侦听器相同的行为。
请仔细阅读该代码。实际上,您将删除现有的事件侦听器,而不是将您自己的事件添加到列表中。我刚刚发现,如果我尝试在FluentNH中使用乐观锁定(使用版本映射),它将无法工作,因为它会自动注册一些事件侦听器,并且您提供的代码会将其移除。 – 2011-02-15 16:11:22
好的,一个更正:我忽略了错误的听众进行审计。但是我的问题依然存在:假设在调用ExposeConfiguration时可以删除任何现有的侦听器是否明智? – 2011-02-15 16:43:40