首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过Fluent NHibernate添加事件监听器?

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

Stack Overflow用户
提问于 2009-09-16 15:15:42
回答 3查看 7.5K关注 0票数 17

我想添加一个事件侦听器(IPreUpdateEventListener)来添加NHibernate,但是我似乎找不到使用fluent配置的示例。

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

代码语言:javascript
复制
_sessionFactory = Fluently.Configure()
    .Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql())
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<IEntity>())
    .BuildSessionFactory();

有人知道怎么做吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-09 07:45:26

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

代码语言:javascript
复制
_sessionFactory = Fluently.Configure()
   .Database(MsSqlConfiguration.MsSql2005.ConnectionString(connectionString).ShowSql())
   .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Entity>())
   .ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});
票数 13
EN

Stack Overflow用户

发布于 2011-02-21 12:36:54

所以,延迟响应,但为了后代,在不删除现有注册侦听器的情况下添加侦听器(就像Bengt Be之前的答案一样):

代码语言:javascript
复制
var config = new Configuration ();
config.AppendListeners (ListenerType.PreUpdate, new [] { new AuditEventListener () });

等。

票数 34
EN

Stack Overflow用户

发布于 2011-08-31 02:59:07

在这里让死人复活,但是这个:

代码语言:javascript
复制
........
   .ExposeConfiguration(c => c.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {new AuditEventListener()});

应该是:

代码语言:javascript
复制
.ExposeConfiguration(c => c.AppendListeners(ListenerType.PreUpdate, new object[]
    {
        new AuditEventListener()
    });

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

如果你对一些更动态的东西感兴趣,你可以这样做:

代码语言:javascript
复制
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
                    });
                }
            });
    }

然后调用类似这样的东西:

代码语言:javascript
复制
AddListenerToConfiguration<AuditEventListener>(smFactory, 
            ListenerType.PreUpdate);

当您查看Fluent配置时,这样可以使代码更加整洁。它还允许您轻松地将单个类型注册到多个侦听器类型。

至于删除默认侦听器,除非我有一个侦听器继承自默认侦听器实现,并在被覆盖的方法上调用base.METHODNAME,或者复制与默认侦听器相同的行为,否则我不会删除它们。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1433638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档