信号员:通过统一迪获得hubcontext

时间:2013-08-07 14:40:08

标签: unity-container signalr

我开始使用unity将东西注入我的一个集线器中。这有效,但是,当我在我的集​​线器之外的某个地方解决hubcontext时,我似乎得到了错误的一个。这是因为当我尝试使用它发送消息时,连接的客户端无法获取它们。

Dependencyresolver:

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

还有什么需要注册吗?

1 个答案:

答案 0 :(得分:2)

您应该使用解析程序的实例从容器中获取IConnectionMananger,如here所述。 虽然它适用于Ninject,但你可以得到这个想法。 (看看底部)。此ConnectionManager可以通过 GlobalHost 获取HubContext。

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

我们做了一个简单的例子来说明这个(使用signalr的Ninject和Unity示例),你可以查看它here。如果您渴望进行设置,则为here。 ;)

如果有帮助,请告诉我。