我正在使用NHibernate和OWIN。我想将我的SessionFactory存储在OWIN中,而不是旧的Global.asax。
在我的OWIN Startup方法中,我做了:
app.CreatePerOwinContext(Of MobLib.MobDataProvider)(AddressOf MobLib.MobDataProvider.CreateProvider)
我在调用CreateProvider时设置断点,我可以看到它已成功调用并返回一个对象。
稍后,我需要拉出这个会话工厂并使用它,所以我这样做:
Dim context As Microsoft.Owin.IOwinContext = HttpContext.Current.GetOwinContext
Dim x As MobLib.MobDataProvider = context.Get(Of MobLib.MobDataProvider)("")
从上下文中提取的唯一选项需要一个键,但在每个OWIN Context创建对象时不需要一个键。另外,我已经查看了OWIN上下文中的Environment
,但我看不到任何看起来像我的数据提供者的内容。
我觉得我缺少一些基本的东西。
更新
我在Extra字典中找到了该对象,而且密钥非常复杂。
使用这个,我现在可以用它来运行它:
Dim x As MobLib.MobDataProvider = context.Get(Of MobLib.MobDataProvider)("AspNet.Identity.Owin:MobLib.MobDataProvider, MobLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
但这似乎是一个可怕的解决方案。还有更好的方法吗?