我在 ASP.NET 应用程序中使用 Spring.NET 1.3.2、NHibernate 3.1 和 OSIV 模式。
我有一个EventListener
需要限定请求范围的自定义,因为它使用 HttpContext.Current.Items 作为构造函数依赖项。
由于ISession
也是请求范围,我应该能够使用 Spring.NET 为我管理这些依赖项。
问题是 EventListener
,就像,是一个不受请求范围限制IInterceptor
的属性(ISessionFactory
它是一个单例)。Web 对象范围之间的不匹配是有问题的。
我尝试了以下 XML 片段,但条件表达式总是产生 null。我认为这是由于 SpringEventListener
在应用程序级别范围内创建对象,并且之前HttpContext.Current.Items
有机会被填充。
<object id="EventListener" scope="request" type="MyEventListener,DAL">
<constructor-arg index="0" expression="T(System.Web.HttpContext).Current.Items.Contains('Principal')?T(System.Web.HttpContext).Current.Items['Principal']:null"/>
</object>
所以我的要求是:
在 Spring 中配置自定义
EventListener
对象,以便在每个请求的基础上创建它EventListener
实例化必须在请求生命周期中发生得足够晚,以便 HttpContext.Current.Items['Princpial'] 已由自定义 IHttpModule 填充EventListener
实例被注入到当前的OSIVISession