Asp.net mvc 3 为特定NHibernate会话注册事件侦听器

Asp.net mvc 3 为特定NHibernate会话注册事件侦听器,asp.net-mvc-3,nhibernate,Asp.net Mvc 3,Nhibernate,在我的asp.net中,mvc应用程序会话工厂缓存在应用程序级别。然后在每次请求时创建并关闭新会话。 不幸的是,在PostUpdate上订阅的日志记录服务,会话工厂的PostInsert事件需要当前用户id。因此它是在请求范围内创建的。因此,可能同时存在多个日志记录服务实例,并侦听来自会话工厂/会话的事件(如果同时处理多个请求)。因此,一个用户的更改将在会话工厂上引发事件,该事件将由记录器服务的所有现有实例存储 解决方案可以是在会话上订阅,而不是在会话工厂上订阅。这将把记录器服务的依赖范围缩小到

在我的asp.net中,mvc应用程序会话工厂缓存在应用程序级别。然后在每次请求时创建并关闭新会话。 不幸的是,在PostUpdate上订阅的日志记录服务,会话工厂的PostInsert事件需要当前用户id。因此它是在请求范围内创建的。因此,可能同时存在多个日志记录服务实例,并侦听来自会话工厂/会话的事件(如果同时处理多个请求)。因此,一个用户的更改将在会话工厂上引发事件,该事件将由记录器服务的所有现有实例存储

解决方案可以是在会话上订阅,而不是在会话工厂上订阅。这将把记录器服务的依赖范围缩小到单个请求的范围


我的问题是:有没有办法为特定的nhibernate会话而不是整个会话工厂注册事件侦听器?

找到了一个解决方案。ISession接口不公开EventListeners属性,但SessionImpl公开。可以将会话对象强制转换为SessionImpl并分配所需的侦听器