在每个页面请求上调用OWIN Startup

时间:2015-04-17 19:44:42

标签: nhibernate asp.net-web-api2 owin

我正在使用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。这是设计吗?

1 个答案:

答案 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?