Awk*_*der 17 .net c# nhibernate event-listener fluent-nhibernate
我想添加一个事件监听器(IPreUpdateEventListener)来添加NHibernate但是在使用流畅的配置时我似乎无法找到一个例子.
我希望能够在创建会话工厂时添加侦听器,例如,当执行以下代码时.
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<IEntity>())
.BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
有人知道怎么做吗?
Mat*_*ght 32
所以,迟到的回应,但为了后代,添加听众而不删除现有的注册听众(就像Bengt Be的早期回答一样):
var config = new Configuration ();
config.AppendListeners (ListenerType.PreUpdate, new [] { new AuditEventListener () });
Run Code Online (Sandbox Code Playgroud)
等等
Ben*_*tBe 13
迟到的答案,当我试图做同样的事情时发现了你的问题.找到一个应该有效的解决方案:
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>())
.ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
Run Code Online (Sandbox Code Playgroud)
在这里复活死者但是:
........
.ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
Run Code Online (Sandbox Code Playgroud)
应该:
.ExposeConfiguration(c => c.AppendListeners(ListenerType.PreUpdate, new object[]
{
new AuditEventListener()
});
Run Code Online (Sandbox Code Playgroud)
我相信'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
});
}
});
}
Run Code Online (Sandbox Code Playgroud)
然后调用这样的东西:
AddListenerToConfiguration<AuditEventListener>(smFactory,
ListenerType.PreUpdate);
Run Code Online (Sandbox Code Playgroud)
这样可以在查看Fluent配置时获得更清晰的代码.它还允许您轻松地将单个类型注册到多个侦听器类型.
至于删除默认侦听器,我不会删除它们,除非我有一个从默认侦听器实现继承的侦听器并在重写方法上调用base.METHODNAME或复制与默认侦听器相同的行为.
| 归档时间: |
|
| 查看次数: |
7024 次 |
| 最近记录: |