asp.net – SignalR Autofac OWIN:为什么GlobalHost.ConnectionManag
|
我正在一个项目中使用OWIN,SignalR和Autofac。 我正在设置关于signalR的内容如下: // Create the AutoFac container builder:
var builder = new ContainerBuilder();
// ...[Register various other things in here]...
// register signalR Hubs
builder.RegisterHubs(Assembly.GetExecutingAssembly());
// Build the container:
var container = builder.Build();
// Configure SignalR with the dependency resolver.
app.MapSignalR(new HubConfiguration
{
Resolver = new AutofacDependencyResolver(container)
});
我的问题是,当我使用Autofac SignalR集成时,我无法再在服务器上获得一个signalR Hub Context(例如在webapi控制器中),因此无法从服务器端向连接的客户端发送消息。当我不使用Autofac signalR集成时,像下面这样做是这样的: var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.All.notification("Test Message");
但是,当我将Autofac添加到组合中时,这不起作用 – 我没有收到任何错误消息,我似乎收到了一个hubContext,但是调用它并不能真正到达客户端。 如果在对MapSignalR的调用中注释了使用依赖关系解析器对signalR的使用,则GetHubContext的调用再次工作,并且消息成功地到达了signalR客户端,但是当然我不能再在集线器上使用IoC。例如 // Configure SignalR with the dependency resolver.
app.MapSignalR(new HubConfiguration
{
// Resolver = new AutofacDependencyResolver(container)
});
有人可以告诉我为什么使用AutofacDependencyResolver可以阻止GlobalHost.ConnectionManager.GetHubContext正常工作? 注意:我尝试过的另一件事是,而不是使用GlobalHost.ConnectionManager.GetHubContext()我尝试将IConnectionManager注入到我想要向客户端发送消息的webapi控制器中,然后调用GetHubContext,但Autofac不能解决IConnectionManager。 我确实发现了Piotr Szmyd发表的以下文章,这显然是允许的: http://www.szmyd.com.pl/blog/wiring-signalr-with-autofac 但这似乎是基于过时的signalR构建,而在这里似乎有一个nuget包: http://www.nuget.org/packages/SignalR.AutoFac/ 它也似乎过时了。 解决方法如果您使用SignalR的自定义依赖解析器,则除非您修改它,否则您将无法再使用GlobalHost:GlobalHost.DependencyResolver = new AutofacDependencyResolver(container); IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); // A custom HubConfiguration is now unnecessary,since MapSignalR will // use the resolver from GlobalHost by default. app.MapSignalR(); 如果您不想修改GlobalHost,则必须手动解析您的IConnectionManager: IDependencyResolver resolver = new AutofacDependencyResolver(container);
IHubContext hubContext = resolver.Resolve<IConnectionManager>().GetHubContext<MyHub>();
app.MapSignalR(new HubConfiguration
{
Resolver = resolver
}); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp-classic – 在VBScript中输出GUID会忽略它之后的所有文
- ASP.NET – 从内容页面访问主页面元素
- asp.net-mvc – 在ASP.NET MVC中使用ASP.NET Web窗体UserCo
- 为什么我的客户端去服务器来检查在使用ASP.NET MVC包时是否
- 在ASP.NET中设置ECommerce
- asp.net – 如何从HttpResponseMessage获取对象?
- asp.net-mvc – ASP.NET MVC自定义路由搜索
- asp.net – ModalPopupExtender和验证问题
- asp.net-mvc-3 – 从Razor _Layout.cshml访问Session对象
- iis – 是否需要serviceAutoStartProvider属性来自动启动AS
- asp.net – 我可以在ASPX页面中使用扩展方法内联
- asp.net – 身份使用Web API授权属性角色
- 在asp.net mvc上传文件代码后,通过服务器获
- asp.net-mvc – 如何在@ Html.TextBox mvc4中添加
- 什么是ASP.NET中的CRON作业? – C#
- asp.net-mvc-4 – 从beta版升级后的Autofac / MV
- asp.net-mvc – 获取错误“视图at’/ Views / Pa
- asp.net-mvc – 使用Razor在ASP.NET MVC 4中防止
- asp.net-mvc-4 – WebApi Json.NET自定义日期处理
- asp.net – 对齐和填充为asp:CheckBoxList
