我想添加一个事件侦听器(IPreUpdateEventListener
)来添加NHibernate,但是我似乎找不到使用fluent配置的示例。
我希望能够在创建会话工厂时添加侦听器,例如,当执行以下代码时。
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<IEntity>())
.BuildSessionFactory();
有人知道怎么做吗?
发布于 2009-10-09 07:45:26
回答晚了,在我尝试做同样的事情时发现了你的问题。找到了一个应该有效的解决方案:
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>())
.ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
发布于 2011-02-21 12:36:54
所以,延迟响应,但为了后代,在不删除现有注册侦听器的情况下添加侦听器(就像Bengt Be之前的答案一样):
var config = new Configuration ();
config.AppendListeners (ListenerType.PreUpdate, new [] { new AuditEventListener () });
等。
发布于 2011-08-31 02:59:07
在这里让死人复活,但是这个:
........
.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,或者复制与默认侦听器相同的行为,否则我不会删除它们。
https://stackoverflow.com/questions/1433638
复制相似问题