NHibernate Multiple Event Listeners - PullRequest
       1

NHibernate Multiple Event Listeners

2 голосов
/ 28 февраля 2011

Можно ли зарегистрировать несколько прослушивателей событий?

В настоящее время мы регистрируем прослушиватели событий, используя .ExposeConfiguration (AddSoftDelete), в котором AddSoftDelete является классом, регистрирующим прослушиватель;

private static void AddSoftDelete(Configuration config)
{
    config.SetListener(ListenerType.Delete, new SoftDeleteListener());
}

У нас естьОбнаружено, что мы не можем зарегистрировать несколько прослушивателей событий одного и того же типа, то есть мы не можем зарегистрировать более одного прослушивателя для «ListenerType.Delete».

Можно ли зарегистрировать новых прослушивателей без переопределения существующих?

Решено ...

Удалось зарегистрировать несколько слушателей, используя следующий код:

config.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[]
                                                                {
                                                                    new Listener1(),
                                                                    new Listener2()
                                                                };

Повторите для каждого типа слушателя.

Ответы [ 3 ]

0 голосов
/ 28 февраля 2011

Я делаю что-то похожее в моем коде.В объекте NHibernate.Cfg.Configuration должен быть метод AppendListeners (тип ListenerType, object [] listeners).

Существует также метод SetListeners, который, я полагаю, заменяет список слушателей вместо добавления к нему.1003 *

0 голосов
/ 28 февраля 2011

Слушатели на самом деле не слушатели, а разработчики.Может быть только одна реализация «события».

Вы можете реализовать слушатель, где вы можете подключить несколько реализаций.Например, реализация для разных типов объектов.Вы можете передавать «событие» каждой реализации, пока одна из них не обработает его (например, когда реализован интерфейс ISoftDeletable, SoftDeleteImplementor обрабатывает его).Вам нужно позаботиться о конкурирующих разработчиках (чем больше тот, с кем можно справиться, тем важнее порядок, в котором вы их называете).

0 голосов
/ 28 февраля 2011

Почему необходимо зарегистрировать более одного ListenerType.Delete?

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

...