![](/img/trans.png)
[英]Inject SignalR IHubContext into controller with Autofac
[英]SignalR 2, Autofac 3.5, MVC 5 and OWIN: How to inject SignalR hub into a controller?
我正在尝试使用SignalR将通知系统添加到我的MVC Web应用程序。 我想在控制器中发生某些操作时触发通知。
得益于Microsoft出色的SignalR文档 ,使SignalR 2的启动和运行变得轻而易举 ,但是我正在努力找出现在如何更改该代码以将Autofac用于DI,以便可以注入集线器,或者可以使我做些什么访问集线器,进入控制器。
我已经按照Autofac文档中的示例设置了Autofac依赖解析器:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ApplicationCookie",
LoginPath = new PathString("/Account/Login"),
CookieName = "fornet"
});
var builder = new ContainerBuilder();
// STANDARD SIGNALR SETUP:
// Get your HubConfiguration. In OWIN, you'll create one
// rather than using GlobalHost.
var config = new HubConfiguration();
// Register your SignalR hubs.
builder.RegisterHubs(Assembly.GetExecutingAssembly());
// Set the dependency resolver to be Autofac.
var container = builder.Build();
config.Resolver = new AutofacDependencyResolver(container);
// OWIN SIGNALR SETUP:
// Register the Autofac middleware FIRST, then the standard SignalR middleware.
app.UseAutofacMiddleware(container);
app.MapSignalR("/signalr", config);
}
}
并添加了一个枢纽:
public class TestHub : Hub
{
public ITest Test { get; set; }
public void Hello()
{
Test.DoStuff();
}
public override Task OnConnected()
{
Clients.Caller.hello("Welcome!");
return base.OnConnected();
}
}
但现在我不知道如何将集线器注入控制器。 我已经尝试了public SettingsController(IHubContext hubContext)
, public SettingsController(IHubContext<TestHub> hubContext)
, public SettingsController(IHubConnectionContext<TestHub> hubConnectionContext)
和public SettingsController(TestHub hubConnectionContext)
,但是它们都给了我例外。
注入集线器的正确方法是什么?
编辑:我应该说我已经阅读了很多与此相关的SO问题,但尚未找到答案。 这些问题要么与Autofac和SignalR的不同版本特别相关,要么与日期有关。
编辑2:我正在使用Autofac.SignalR 3.0.2 NuGet包 ,但也有Autofac.SignalR2 4.0.0 ,我不确定是否应该使用它?
不知道这是否正是您所需要的,但是我相信您可以使用以下命令访问控制器中的集线器:
var hub = GlobalHost.ConnectionManager.GetHubContext<yoursignalrnamespace.yourhubname>();
然后发布通知或类似信息:
hub.Clients.All.postnotification("notified!")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.