如何通过Fluent NHibernate添加事件监听器?

我想添加一个事件监听器( IPreUpdateEventListener )来添加NHibernate但是在使用流畅的配置时我似乎无法找到一个例子。

我希望能够在创建会话工厂时添加侦听器,例如,当执行以下代码时。

 _sessionFactory = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql()) .Mappings(m => m.FluentMappings.AddFromAssemblyOf()) .BuildSessionFactory(); 

有人知道怎么做吗?

迟到的答案,当我试图做同样的事情时发现了你的问题。 找到一个应该有效的解决方案:

 _sessionFactory = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql()) .Mappings(m => m.FluentMappings.AddFromAssemblyOf()) .ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()}); 

所以,迟到的回应,但为了后代,添加听众而不删除现有的注册听众(就像Bengt Be的早期回答一样):

 var config = new Configuration (); config.AppendListeners (ListenerType.PreUpdate, new [] { new AuditEventListener () }); 

等等

在这里复活死者,但是:

 ........ .ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()}); 

应该:

 .ExposeConfiguration(c => c.AppendListeners(ListenerType.PreUpdate, new object[] { new AuditEventListener() }); 

我相信’SetListener’方法(在另一个答案中描述)也会删除所有以前的侦听器。

如果你想要更有活力的东西,你可以这样做:

 private void AddListenerToConfiguration(FluentConfiguration config, params ListenerType[] typesForListener) where T : class { var listener = Activator.CreateInstance(); config.ExposeConfiguration(x => { foreach (var listenerType in typesForListener) { x.AppendListeners(listenerType, new T[] { listener }); } }); } 

然后调用这样的东西:

 AddListenerToConfiguration(smFactory, ListenerType.PreUpdate); 

当您查看Fluent配置时,这允许更清晰的代码。 它还允许您轻松地将单个类型注册到多个侦听器类型。

至于删除默认侦听器,我不会删除它们,除非我有一个inheritance自默认侦听器实现的侦听器并在重写方法上调用base.METHODNAME或复制与默认侦听器相同的行为。