是否可以注册多个事件监听器?
我们目前使用.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重复。
答案 0 :(得分:0)
为什么需要注册多个ListenerType.Delete?
如果您在一种类型上有多个事件侦听器,则应用程序上会出现一些性能问题。如果要使用此侦听器处理不同的实体,请在SoftDeleteListener类中进行处理。
答案 1 :(得分:0)
我在代码中做了类似的事情。 NHibernate.Cfg.Configuration对象上应该有一个AppendListeners(ListenerType类型,object []侦听器)方法。
还有一个SetListeners方法,我假设它替换了侦听器列表而不是添加它。
答案 2 :(得分:0)
侦听器实际上不是侦听器,它们是实现者。只有一个“事件”的实现。
您可以实现一个可以插入多个实现的侦听器。例如,针对不同实体类型的实现。您可以将“事件”传递给每个实现,直到其中一个处理它(例如,当实现ISoftDeletable
接口时,SoftDeleteImplementor
正在处理它)。你需要关心竞争的实现者(更多的是可以处理它,顺序对你称之为重要)。