我想添加一个事件侦听器( IPreUpdateEventListener
)添加NHibernate的,但我似乎无法用流利的配置时找到一个例子。
我希望能够当我创建会话工厂,例如,当下面的代码是执行添加监听器。
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<IEntity>())
.BuildSessionFactory();
有人知道怎么做吗?
迟到的回答,发现你的问题,当我试图做同样的。 研究发现,应该工作的解决方案:
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>())
.ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
因此,反应迟缓,但为后人着想,增加听众无需移除现有的注册听众(如本特从早期的答案要会做):
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<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);
这样就可以更清晰的代码,而你是在看流利的配置。 它还可以让你轻松地注册一个单一型向多个监听器类型。
至于删除默认的监听器,除非我有一个从默认的监听器实现继承和重载的方法调用base.METHODNAME或复制相同的行为作为默认的监听器的监听器,我不会删除它们。