当通过JSONP调用SignalR Hub方法但通过CORS调用时,DI不起作用

时间:2014-09-14 10:38:34

标签: jsonp signalr cors autofac owin

我正在使用当前版本的Autofac(3.5.2),SignalR(2.1.1)和OWIN(3.0.0),以及Owin.Cors 3.0.0和Autofac SignalR 2 Integration 3.1.0软件包。

问题是我有一个我从jQuery客户端调用的hub方法。该方法使用Autofac解析的对象(请参阅下面的代码)。当我使用禁用CORS并启用JSONP的对象时,一切正常。但是,当我将它与CORS一起使用时(我必须,因为我计划将数据传递给集线器方法)它失败并显示错误消息:

  

无法解析实例,并且无法从此LifetimeScope创建嵌套生命周期,因为它已经被处理掉了。

我的主要问题是 - 它如何与JSONP一起使用而不是与CORS一起使用?当然,任何有关如何解决这个问题的帮助都会受到欢迎。

以下是一些代码。这就是我称之为hub方法的方法:

chat.server.test();

整个ChatHub类:

public class ChatHub : Hub
{
    private readonly ILifetimeScope hubLifetimeScope;
    private readonly ITaskExecutor taskExecutor;

    public ChatHub(ILifetimeScope lifetimeScope)
    {
        hubLifetimeScope = lifetimeScope.BeginLifetimeScope();
        taskExecutor = hubLifetimeScope.Resolve<ITaskExecutor>();
    }

    public void Test()
    {
        var task = new CreateMessage
        {
            Text = "test"
        };
        taskExecutor.Execute(task);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing && hubLifetimeScope != null)
        {
            hubLifetimeScope.Dispose();
        }

        base.Dispose(disposing);
    }
}

这是OWIN的配置方式:

app.Map("/signalr", map =>
{
    map.UseCors(CorsOptions.AllowAll);
    map.RunSignalR(new HubConfiguration { EnableDetailedErrors = true });
});

这就是ITaskExecutor的注册方式:

builder.RegisterType<TaskExecutor>().As<ITaskExecutor>();

这就是依赖性求解器的注册方式:

GlobalHost.DependencyResolver = new Autofac.Integration.SignalR.AutofacDependencyResolver(autofac);

0 个答案:

没有答案