2012-07-05 77 views
2

我刚刚将Ninject的依赖注入框架切换到StructureMap - 由于Ninject产生了糟糕的性能!我在SignalR集线器正在清除

问题是,当我的电缆铺设DependencyResolver,我的集线器正在由RouteTable.Routes.MapHubs线清除出:

GlobalHost.DependencyResolver = new SignalRDependencyResolver(ObjectFactory.Container); 
RouteTable.Routes.MapHubs(GlobalHost.DependencyResolver); 

含义毂对象在/ SignalR /集线器javascript文件有一个空的Hubs对象。

我在application_start中像在wiki中那样分配DependencyResolver,并且在SignalR之后做了我的MVC4和WebAPI依赖关系解析器。

这可能是什么原因造成的?

更新 - 这里是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; 
     } 
    } 
+0

一个坏的依赖解析器的实现可能会导致它。 – davidfowl 2012-07-05 18:15:31

+0

我用解析器代码更新了问题 – reach4thelasers 2012-07-05 20:17:44

回答

2

这里是依赖解析器的实现,在年底的工作:

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); 
    } 
}