Selective IPrincipal Injection via StructureMap with SignalR

1k Views Asked by At

StructureMap is configured to inject HttpContext.Current.User when an IPrincipal is requested for any ASP.NET MVC web request, like so:

For<IPrincipal>().Use(x => HttpContext.Current.User);

But when my SignalR hub asks for a service that depends on an IPrincipal, injection fails because HttpContext.Current is null. Instead, SignalR already has a HubCallerContext property that exposes the current IPrincipal via Context.User.

How do I configure StructureMap to always inject a valid IPrincipal into the services my SignalR hub relies on?

1

There are 1 best solutions below

3
On BEST ANSWER

Just do this:

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