使用StructureMap对SignalR 2.0.1进行依赖注入

时间:2014-01-04 21:04:12

标签: dependency-injection inversion-of-control signalr structuremap lifecycle

我正在尝试使用StructureMap将依赖注入到SignalR中心。

互联网上有很多消息来源说这应该按照这个答案来完成:How do you Resolve signalR v2.0 with StructureMap v2.6。我尝试了它,并让它工作 - 至少在第一次页面加载后的第一个动作。

当我尝试离开包含SignalR-JS-Code(或重新加载页面)的HTML页面时,或者当我第二次使用我的集线器中定义的其中一个函数时,我得到了这个StructureMapException:{{1在You cannot use the HttpContextLifecycle outside of a web request. Try the HybridLifecycle instead.

public IHub Create(HubDescriptor descriptor)函数中

我已经通过在引导期间修改扫描来尝试这个:

HubActivator

但这没有帮助。

我需要更改(在SignalR或StructureMap中)来修复此异常?

1 个答案:

答案 0 :(得分:3)

事实证明我必须更改我的NHibernate注册表格式

[...]
if (HttpContext.Current != null)
{
    For<ISession>()
    .HttpContextScoped()
    .Use(x => x.GetInstance<ISessionFactory>().OpenSession());
}
[...]

[...]
if (HttpContext.Current != null)
{
    For<ISession>()
    .HybridHttpOrThreadLocalScoped()
    .Use(x => x.GetInstance<ISessionFactory>().OpenSession());
}
[...]

不同的背景似乎可以避免会话迷失。