mut*_*tex 29 asp.net autofac signalr owin
我正在尝试在单个项目中使用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)
});
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我使用Autofac SignalR集成时,我不能再在服务器上获取signalR Hub Context(例如在webapi控制器中),因此无法从服务器端向连接的客户端发送消息.当我不使用Autofac signalR集成时,如下所示:
var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.All.notification("Test Message");
Run Code Online (Sandbox Code Playgroud)
但是当我将Autofac添加到混合中时,这不起作用 - 我没有得到任何错误消息,我似乎得到了一个hubContext,但是对它的调用实际上似乎并没有到达客户端.
如果我在对MapSignalR的调用中注释掉了对signalR的依赖性解析器的使用,那么对GetHubContext的调用再次起作用并且消息成功地到达signalR客户端,但当然我不能再在我的集线器上使用IoC.例如
// Configure SignalR with the dependency resolver.
app.MapSignalR(new HubConfiguration
{
// Resolver = new AutofacDependencyResolver(container)
});
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么使用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/
它似乎也过时了.
hal*_*r73 32
如果您使用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();
Run Code Online (Sandbox Code Playgroud)
如果您不想修改GlobalHost,则必须手动解析IConnectionManager:
IDependencyResolver resolver = new AutofacDependencyResolver(container);
IHubContext hubContext = resolver.Resolve<IConnectionManager>().GetHubContext<MyHub>();
app.MapSignalR(new HubConfiguration
{
Resolver = resolver
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7962 次 |
| 最近记录: |