Концентраторы SignalR очищаются

Я только что переключил фреймворки 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;
        }
    }

person reach4thelasers    schedule 05.07.2012    source источник
comment
Это может быть вызвано плохой реализацией преобразователя зависимостей.   -  person davidfowl    schedule 05.07.2012
comment
Я обновил вопрос с кодом преобразователя   -  person reach4thelasers    schedule 06.07.2012


Ответы (1)


Вот реализация Rependency Resolver, которая в итоге сработала:

public class SignalRDependencyResolver : SignalR.DefaultDependencyResolver
{
    private readonly IContainer _container;

    public SignalRDependencyResolver(IContainer container)
    {

        if (container == null)
        {
            throw new ArgumentNullException("container");
        }

        _container = container;
    }

    public override object GetService(Type serviceType)
    {
        var instance = _container.TryGetInstance(serviceType) ?? base.GetService(serviceType);
        return instance;
    }

    public override IEnumerable<object> GetServices(Type serviceType)
    {
        IEnumerable<object> instances =  _container.GetAllInstances(serviceType).Cast<object>();
        IEnumerable<object> instances2 = base.GetServices(serviceType);

        return instances2.Concat(instances);
    }
}
person reach4thelasers    schedule 09.07.2012