Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 带信号器的StructureMap选择性注射_Asp.net Mvc_Dependency Injection_Structuremap_Signalr_Iprincipal - Fatal编程技术网

Asp.net mvc 带信号器的StructureMap选择性注射

Asp.net mvc 带信号器的StructureMap选择性注射,asp.net-mvc,dependency-injection,structuremap,signalr,iprincipal,Asp.net Mvc,Dependency Injection,Structuremap,Signalr,Iprincipal,StructureMap配置为在任何ASP.NET MVC web请求请求IPrincipal时插入HttpContext.Current.User,如下所示: For<IPrincipal>().Use(x => HttpContext.Current.User); For().Use(x=>HttpContext.Current.User); 但当我的信号集线器请求依赖于IPrincipal的服务时,注入失败,因为HttpContext.Current为空。相反,信号器

StructureMap配置为在任何ASP.NET MVC web请求请求
IPrincipal
时插入
HttpContext.Current.User
,如下所示:

For<IPrincipal>().Use(x => HttpContext.Current.User);
For().Use(x=>HttpContext.Current.User);
但当我的信号集线器请求依赖于
IPrincipal
的服务时,注入失败,因为
HttpContext.Current
为空。相反,信号器已经有一个
HubCallerContext
属性,该属性通过
Context.User
公开当前的
IPrincipal

如何将StructureMap配置为始终将有效的
IPrincipal
注入我的信号集线器所依赖的服务?

只需执行以下操作:

For<IPrincipal>().Use(x => Thread.CurrentPrincipal);
For().Use(x=>Thread.CurrentPrincipal);

如何从集线器外部检索当前的
HubCallerContext
?好了,没有像HttpContext那样的静态、全局的
HubCallerContext.Current
。啊,好的。。您不能使用
Thread.CurrentThread.CurrentPrincipal
?要尝试
Thread.CurrentPrincipal
(对于非静态上下文)。