Как правильно настроить прослушиватели событий NHibernate - PullRequest
2 голосов
/ 30 октября 2009

Я пытаюсь использовать прослушиватель событий в первый раз. Все примеры, которые я видел, показывают, как легко их настроить, но по какой-то причине у меня возникают проблемы - кажется, это не называется. Я подозреваю, что упускаю что-то очевидное.

Я пробовал это:

<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() };

Я знаю, что этого не требуется, и я должен быть в состоянии правильно его настроить. Кто-нибудь может пролить свет на то, что я здесь делаю неправильно?

1 Ответ

1 голос
/ 01 ноября 2009

Ваша конфигурация в порядке, просто вы забыли позвонить cfg.Configure(). Измените свой код инициализации на этот и ваш штраф:

var cfg = new NHibernate.Cfg.Configuration();
cfg.Configure();
cfg.AddAssembly("MyDllName");
sessionFactory = cfg.BuildSessionFactory();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...