我试图在一个项目中使用OWIN、Signal和Autofac.
我正在对信号机进行如下设置:
// 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集成时,我无法再在服务器上(例如在WebAPI控制器中)获得SignalR Hub上下文,因此无法从服务器端向连接的客户端发送消息.当我不使用Autofac SignalR集成时,我是如何做到这一点的,如下所示:
var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.All.notification("Test Message");
但是,当我将Autofac添加到Mix中时,这就不起作用了--我没有收到任何错误消息,而且似乎得到了一个hubContext,但是对它的调用似乎实际上并没有到达客户端.
如果我注释掉在对MapSignalR的调用中使用SignalR的依赖项解析器,则对GetHubContext的调用会再次工作,消息会成功到达SignalR客户端,但当然我不能再在集线器上使用IoC.例如:
// Configure SignalR with the dependency resolver.
app.MapSignalR(new HubConfiguration
{
// Resolver = new AutofacDependencyResolver(container)
});
Can anybody tell me why using the AutofacDependencyResolver stops GlobalHost.ConnectionManager.GetHubContext from working correctly??个
注意:我try 过的另一件事是不使用GlobalHost.连接管理器.GetHubContext()我try 将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/
它似乎也已经过时了.