Я пытаюсь использовать прослушиватель событий в первый раз. Все примеры, которые я видел, показывают, как легко их настроить, но по какой-то причине у меня возникают проблемы - кажется, это не называется. Я подозреваю, что упускаю что-то очевидное.
Я пробовал это:
<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() };
Я знаю, что этого не требуется, и я должен быть в состоянии правильно его настроить. Кто-нибудь может пролить свет на то, что я здесь делаю неправильно?