SignalR& SimpleInjector在集线器和前端

时间:2015-07-29 13:12:56

标签: c# asp.net signalr

我试图在我的项目中设置一个信号器集线器,使用simpleinjector进行依赖注入。

我在Startup.cs中有一些配置

[assembly: OwinStartup(typeof(Startup))]

namespace CallCentre.Client
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var container = new Container();
            container.Register<TwilioHub>();
            container.Verify();
            var config = new HubConfiguration()
            {
                Resolver = new SignalRSimpleInjectorDependencyResolver(container)
            };
            app.MapSignalR(config);
        }
    }
}

DI Resolver

public class SignalRSimpleInjectorDependencyResolver : DefaultDependencyResolver
    {
        private readonly Container _container;
        public SignalRSimpleInjectorDependencyResolver(Container container)
        {
            _container = container;
        }
        public override object GetService(Type serviceType)
        {
            return ((IServiceProvider)_container).GetService(serviceType)
                   ?? base.GetService(serviceType);
        }

        public override IEnumerable<object> GetServices(Type serviceType)
        {
            return _container.GetAllInstances(serviceType)
                .Concat(base.GetServices(serviceType));
        }
    }

我的中心

public class TwilioHub : Hub
{
    public void Send(int callCount, int queueId)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<TwilioHub>();
        context.Clients.All.updateQueueCount(callCount, queueId);
    }
}

解决方案中其他地方称为集线器的类

public class QueueStateHandler : IQueueStateHandler
{
    private readonly TwilioHub _twilioHub;


    public QueueStateHandler(TwilioHub twilioHub)
    {
        _twilioHub = twilioHub;
    }

    public void IncrementQueueById(int id)
    {
        _twilioHub.Send(5,1);
    }
}

我的前端代码

$(function () {
        var hub = $.connection.twilioHub;
        hub.logging = true;
        var queue = $('#QueueCount');
        hub.client.updateQueueCount = function(queueCount, id) {
            alert(queueCount);
        };
        $.connection.hub.start();
    });

我可以使用直接网络api设置一切,跳过DI,一切正常。一旦我带入DI,我就开始遇到问题。此刻它默默地摔倒在某个地方。我可以逐步完成代码并最终进入集线器,但我的前端没有任何反应。

任何关于我做错事的指示都将不胜感激。

0 个答案:

没有答案