在每个页面请求上调用 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?
我正在使用 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?