我正在使用OWIN的WebAPI 2项目中实现NHibernate会话工厂。下面是我的启动类的片段。我注意到每次在调试环境中加载页面时都会调用Startup。这似乎非常昂贵,SessionFactory应该只在每个应用程序生命周期创建一次。
我该如何避免这种情况?我认为重复的电话会引起问题。我收到的错误似乎与在OWIN中多次创建的会话工厂有关。
Public Class Startup
Public Sub Configuration(app As IAppBuilder)
GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)
app.CreatePerOwinContext(AddressOf MobLib.MobDataProvider.CreateProvider)
End Sub
End Class
更新
我已确认Configuration
仅运行一次,但每次加载页面时都会调用CreateProvider
。这是设计吗?
答案 0 :(得分:2)
我将回答我自己的问题,而不是删除它以隐藏我的耻辱 - 我的意思是,为了子孙后代!
一切都表现得如此,CreatePerOwinContext
完全正是按照它所说的去做。它在每次创建上下文时调用该函数。对于像NHibernate SessionFactory
这样重的东西,这不是你想要的 - 特别是因为这会导致多个会话工厂。我不知何故认为OWIN Context是我应该存储这个Singleton对象的地方,当它绝对不是。
这提出了一个真正的问题:我应该将初始化代码放在OWIN Startup
方法还是Global.asax
文件中。这是一个完全不同的问题,可以在许多地方看到。例如:Do I need a Global.asax.cs file at all if I'm using an OWIN Startup.cs class and move all configuration there?