I’ve just switched Dependency Injection frameworks from Ninject to StructureMap – due to Ninject producing abysmally bad performance!
Problem I’m having is that when I wire up the DependencyResolver, my hubs are being cleared out by the RouteTable.Routes.MapHubs line:
GlobalHost.DependencyResolver = new SignalRDependencyResolver(ObjectFactory.Container);
RouteTable.Routes.MapHubs(GlobalHost.DependencyResolver);
Meaning the hubs object in the /SignalR/hubs javascript file has an empty Hubs object.
I’m assigning the DependencyResolver in application_start like in the wiki, and I’m doing my MVC4 and WebAPI Dependency Resolvers AFTER SignalR’s.
What could be causing this?
Update – here is the DependencyResolver Implementation:
public class SignalRDependencyResolver : DefaultDependencyResolver
{
private IContainer _container;
public SignalRDependencyResolver(IContainer container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
object service = null;
if (!serviceType.IsAbstract && !serviceType.IsInterface && serviceType.IsClass)
{
// Concrete type resolution
service = _container.GetInstance(serviceType);
}
else
{
// Other type resolution with base fallback
service = _container.TryGetInstance(serviceType) ?? base.GetService(serviceType);
}
return service;
}
public override IEnumerable<object> GetServices(Type serviceType)
{
var objects = _container.GetAllInstances(serviceType).Cast<object>();
objects.Concat(base.GetServices(serviceType));
return objects;
}
}
Here is the Dependency Resolver Implementation that worked in the end: