NHibernate多事件监听器

时间:2011-02-28 06:20:50

标签: c# nhibernate fluent-nhibernate addeventlistener

是否可以注册多个事件监听器?

我们目前使用.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()
                                                                };

对每个ListenerType重复。

3 个答案:

答案 0 :(得分:0)

为什么需要注册多个ListenerType.Delete?

如果您在一种类型上有多个事件侦听器,则应用程序上会出现一些性能问题。如果要使用此侦听器处理不同的实体,请在SoftDeleteListener类中进行处理。

答案 1 :(得分:0)

我在代码中做了类似的事情。 NHibernate.Cfg.Configuration对象上应该有一个AppendListeners(ListenerType类型,object []侦听器)方法。

还有一个SetListeners方法,我假设它替换了侦听器列表而不是添加它。

答案 2 :(得分:0)

侦听器实际上不是侦听器,它们是实现者。只有一个“事件”的实现。

您可以实现一个可以插入多个实现的侦听器。例如,针对不同实体类型的实现。您可以将“事件”传递给每个实现,直到其中一个处理它(例如,当实现ISoftDeletable接口时,SoftDeleteImplementor正在处理它)。你需要关心竞争的实现者(更多的是可以处理它,顺序对你称之为重要)。