Я только что переключил фреймворки Dependency Injection с Ninject на StructureMap - из-за того, что Ninject дает ужасно плохую производительность!
Проблема, с которой я сталкиваюсь, заключается в том, что когда я подключаю DependencyResolver, мои концентраторы очищаются строкой RouteTable.Routes.MapHubs:
GlobalHost.DependencyResolver = new SignalRDependencyResolver(ObjectFactory.Container);
RouteTable.Routes.MapHubs(GlobalHost.DependencyResolver);
Это означает, что объект концентраторов в файле javascript /SignalR/hubs имеет пустой объект концентраторов.
Я назначаю DependencyResolver в application_start, как в вики, и делаю свои MVC4 и Rependency Resolvers ПОСЛЕ SignalR.
Что может быть причиной этого?
Обновление - вот реализация DependencyResolver:
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;
}
}