Asp.net mvc 带信号器的StructureMap选择性注射
StructureMap配置为在任何ASP.NET MVC web请求请求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为空。相反,信号器
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
(对于非静态上下文)。