0

我开始使用统一将东西注入我的一个集线器。这可行,但是,当我在集线器之外的某个地方解析集线器上下文时,似乎我弄错了。这是因为当我尝试用它发送消息时,连接的客户端没有收到它们。

依赖解析器:

public class SignalRUnityDependencyResolver : DefaultDependencyResolver, IDependencyResolver
    {
        private IUnityContainer _container;
        public SignalRUnityDependencyResolver(IUnityContainer container)
        {
            _container = container;
        }
        public override object GetService(Type serviceType)
        {
            if (_container.IsRegistered(serviceType)) return _container.Resolve(serviceType);
            else return base.GetService(serviceType);
        }
        public override IEnumerable<object> GetServices(Type serviceType)
        {
            if (_container.IsRegistered(serviceType)) return _container.ResolveAll(serviceType);
            else return base.GetServices(serviceType);
        }
    }

我在容器中注册的内容:

container.RegisterType<MessageHub>(new InjectionConstructor(new EFAuthRepository()));

我的枢纽:

public class MessageHub : Hub
{
    IAuthRepository _repository;
    public MessageHub(IAuthRepository repository)
    {
        _repository = repository;
    }

我如何在中心之外解决:

 var context = GlobalHost.ConnectionManager.GetHubContext<MessageHub>();

还有什么需要注册的吗?

4

1 回答 1

2

您应该使用解析器的实例从容器中获取 IConnectionMananger,如此处所述。虽然它适用于 Ninject,但您可以理解。(看底部)。这个 ConnectionManager 可以通过 GlobalHost 为您提供HubContext

resolver.Resolve<IConnectionManager>().GetHubContext<MessageHub>()

我们做了一个简单的例子来说明这一点(使用信号器的 Ninject 和 Unity 示例),你可以在这里查看。如果您渴望设置,它就在这里。;)

让我知道它是否有帮助。

于 2013-09-14T00:11:09.903 回答