Using Simple Injector with SignalR

前端 未结 6 549
迷失自我
迷失自我 2020-12-04 10:50

I thought using my own IoC would be pretty straight forward with SignalR and maybe it is; most likely I\'m doing something wrong. Here\'s my code I have so far:



        
6条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-04 11:21

    The following worked for me. In addition, you will need to register a delegate with the container for your hub class before instantiating the dependency resolver.

    ex: container.Register(() =>
            {
                IMyInterface dependency = container.GetInstance();
    
                return new MyHub(dependency);
            });
    
    public class SignalRDependencyResolver : DefaultDependencyResolver
    {
        private Container _container;
        private HashSet _types = new HashSet();
    
        public SignalRDependencyResolver(Container container)
        {
            _container = container;
    
            RegisterContainerTypes(_container);
        }
    
        private void RegisterContainerTypes(Container container)
        {
            InstanceProducer[] producers = container.GetCurrentRegistrations();
    
            foreach (InstanceProducer producer in producers)
            {
                if (producer.ServiceType.IsAbstract || producer.ServiceType.IsInterface)
                    continue;
    
                if (!_types.Contains(producer.ServiceType))
                {
                    _types.Add(producer.ServiceType);
                }
            }
        }
    
        public override object GetService(Type serviceType)
        {
            return _types.Contains(serviceType) ? _container.GetInstance(serviceType) : base.GetService(serviceType);
        }
    
        public override IEnumerable GetServices(Type serviceType)
        {
            return _types.Contains(serviceType) ? _container.GetAllInstances(serviceType) : base.GetServices(serviceType);
        }
    }
    
        

    提交回复
    热议问题