我正在使用当前版本的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);