【发布时间】:2017-10-25 09:33:25
【问题描述】:
我正在尝试使用 SignalR 将通知系统添加到我的 MVC Web 应用程序。我想在控制器中发生某些操作时触发通知。
感谢Microsoft's excellent SignalR documentation,让 SignalR 2 启动并运行是一件轻而易举的事,但我正在努力研究如何更改代码以使用 Autofac 进行 DI,以便我可以注入集线器或其他东西允许我访问集线器,进入控制器。
我已经按照Autofac documentation 中的示例设置了 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 package,但也有 Autofac.SignalR2 4.0.0,我不确定是否应该改用它?
【问题讨论】:
-
你有没有想过这个问题?
标签: c# asp.net-mvc signalr autofac signalr-2