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

OWIN Startup being called on each page request

我正在使用 OWIN 的 WebAPI 2 项目中实现 NHibernate 会话工厂。下面是我的创业公司 class 的一个片段。我注意到每次在调试环境中加载页面时都会调用 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 。这是设计使然吗?

我要回答我自己的问题而不是删除它来隐藏我的耻辱 - 我是说,为了后代!

一切正常,CreatePerOwinContext 完全按照它说的去做。每次创建上下文时它都会调用该函数。对于像 NHibernate SessionFactory 这样沉重的东西,这不是您想要的 - 特别是因为这可能会导致多个会话工厂。我以某种方式认为 OWIN 上下文是我应该存储这个 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?