復活死在這裏,但這樣的:
........
.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