【发布时间】:2010-12-11 17:13:18
【问题描述】:
我第一次尝试使用事件监听器。我见过的所有示例都显示了它是多么容易配置,但由于某种原因我遇到了麻烦——它似乎没有被调用。我怀疑我遗漏了一些明显的东西。
我试过了:
<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>
还有:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="TerraCognita.LoanExpress">
<!-- other stuff... -->
<event type="delete">
<listener class="Test.TestDeleteListener, MyDllName" />
</event>
</session-factory>
</hibernate-configuration>
加载配置并构建会话工厂时:
var cfg = new NHibernate.Cfg.Configuration();
cfg.AddAssembly("MyDllName");
sessionFactory = cfg.BuildSessionFactory();
实例化后,cfg.EventListeners.DeleteEventListeners 有一个 DefaultDeleteEventListener 类型的条目(如我所料)。但是,在调用 cfg.AddAssembly 之后,仍然是这种情况 - 但考虑到配置,我希望 DeleteEventListener 实际上应该是 TestDeleteListener 类型。
在我的单元测试中,让事件监听器正常工作的唯一方法是手动将其添加到会话信息中:
var sess = GetSession();
sess.GetSessionImplementation().Listeners.DeleteEventListeners =
new NHibernate.Event.IDeleteEventListener[] { new TestDeleteListener() };
我知道这不是必需的,我应该能够正确配置它。谁能指出我在这里做错了什么?
【问题讨论】: