C# NHibernate多事件侦听器

C# NHibernate多事件侦听器,c#,nhibernate,fluent-nhibernate,addeventlistener,C#,Nhibernate,Fluent Nhibernate,Addeventlistener,是否可以注册多个事件侦听器 我们目前使用.ExposeConfiguration(AddSoftDelete)注册事件侦听器,其中AddSoftDelete是注册侦听器的类 private static void AddSoftDelete(Configuration config) { config.SetListener(ListenerType.Delete, new SoftDeleteListener()); } 我们发现,我们不能注册同一类型的多个事件侦听器,也就是说,我们

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

我们目前使用.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重复此操作。

为什么需要注册多个ListenerType。删除


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

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


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

我在代码中执行类似的操作。在NHibernate.Cfg.Configuration对象上应该有一个AppendListeners(ListenerType类型,object[]listeners)方法


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

我在代码中也做了类似的操作。在NHibernate.Cfg.Configuration对象上应该有一个AppendListeners(ListenerType类型,object[]listeners)方法


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

监听器实际上不是监听器,而是实现者。“事件”只能有一个实现


您可以实现一个侦听器,在其中可以插入多个实现。例如,不同实体类型的实现。您可以将“事件”传递给每个实现,直到其中一个处理它为止(例如,当实现
ISoftDeletable
接口时,
SoftDeleteImplementor
正在处理它)。您需要关心相互竞争的实现者(处理它的人越多,您调用它们的顺序就越重要)。

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


您可以实现一个侦听器,在其中可以插入多个实现。例如,不同实体类型的实现。您可以将“事件”传递给每个实现,直到其中一个处理它为止(例如,当实现
ISoftDeletable
接口时,
SoftDeleteImplementor
正在处理它)。您需要关心相互竞争的实现者(处理它的人越多,您调用它们的顺序就越重要)。

我同意,这只是一个示例。这个问题与注册同一类型的多个侦听器有关。如果有帮助,让我们假设侦听器是另一种类型,即postpdate、PreInsert etcOK。只需添加另一行“config.SetListener(ListenerType.Delete,new SoftDeleteListener());”。就这样。我同意,这只是一个例子。这个问题与注册同一类型的多个侦听器有关。如果有帮助,让我们假设侦听器是另一种类型,即postpdate、PreInsert etcOK。只需添加另一行“config.SetListener(ListenerType.Delete,new SoftDeleteListener());”。就是这样。这对我来说很有意义,这是一个很好的解释,它将我的思想引导到正确的轨道上!这对我来说很有意义,这是一个很好的解释,将我的思想引导到正确的轨道上!有一个
SetListeners(ListenerType,object[])
方法应该按照您描述的做。有一个
SetListeners(ListenerType,object[])
方法应该按照您描述的做。