如何正确配置NHibernate事件侦听器

如何正确配置NHibernate事件侦听器,nhibernate,event-listener,Nhibernate,Event Listener,我第一次尝试使用事件侦听器。我看到的所有示例都显示了它的配置是多么容易,但由于某些原因,我遇到了问题—它似乎没有被调用。我想我遗漏了一些明显的东西 我试过这个: <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory name="TerraCognita.LoanExpress"> <!-- other stuff... -->

我第一次尝试使用事件侦听器。我看到的所有示例都显示了它的配置是多么容易,但由于某些原因,我遇到了问题—它似乎没有被调用。我想我遗漏了一些明显的东西

我试过这个:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory name="TerraCognita.LoanExpress">
        <!-- other stuff... -->
        <listener type="delete" class="Test.TestDeleteListener, MyDllName" />
    </session-factory>
</hibernate-configuration>
实例化之后,cfg.EventListeners.DeleteEventListeners有一个条目,类型为DefaultDeleteEventListener(正如我所期望的)。然而,在调用cfg.AddAssembly之后,情况仍然是这样-但是给定配置,我希望DeleteEventListener实际上应该是TestDeleteListener类型

在我的单元测试中,让事件侦听器工作的唯一方法是手动将其添加到会话信息:

var sess = GetSession();
sess.GetSessionImplementation().Listeners.DeleteEventListeners = 
    new NHibernate.Event.IDeleteEventListener[] { new TestDeleteListener() };

我知道这不应该是必需的,我应该能够正确地配置它。有人能指出我做错了什么吗?

您的配置还可以,只是您忽略了调用
cfg.Configure()
。将您的初始化代码更改为此,然后罚款:

var cfg = new NHibernate.Cfg.Configuration();
cfg.Configure();
cfg.AddAssembly("MyDllName");
sessionFactory = cfg.BuildSessionFactory();

…但这不是我看到的。我不会替换默认的事件侦听器。如上所述,我在跟踪过程中看到的是,事件侦听器的类型始终为DefaultDeleteEventListener,而不是我的.Hm,但是配置没有任何问题!在会话工厂或会话中,您在哪里查找侦听器?它应该在工厂里。。。您是否确实尝试了上述代码(通过复制/粘贴)?这就是问题所在-缺少对cfg.Configure()的调用。如果你想编辑你的答案,我会选择正确答案。嗯,问题“你忘了调用cfg.Configure()?”从一开始就存在。。。看看我答案底部的“P.S.”(我没有编辑它)。我看到了,但你上面的其余答案与我的问题无关。我希望你把它清理干净,把相关的部分留给子孙后代,比如“配置很好,你错过了对…(我自己编辑它,但我没有因果报应。)如果你不愿意,我可以自己添加一个只有这个答案的答案。
var sess = GetSession();
sess.GetSessionImplementation().Listeners.DeleteEventListeners = 
    new NHibernate.Event.IDeleteEventListener[] { new TestDeleteListener() };
var cfg = new NHibernate.Cfg.Configuration();
cfg.Configure();
cfg.AddAssembly("MyDllName");
sessionFactory = cfg.BuildSessionFactory();