Как настроить Autofac и SignalR в приложении MVC 5
Я пытаюсь настроить приложение MVC 5 на использование SignalR 2.2.x и добавить сервис в мойNotificationsHub
, Мы используем Autofac для MVC, но я не уверен, как правильно это настроить. Документация Autofac существует для NuGetAutofac.Integration.SignalR (3.0.2)
а такжеAutofac.Integration.Mvc (3.3.4)
.
На данный момент я делаю регистрацию хабов через:
ContainerBuilder builder = new ContainerBuilder();
// Register MVC controllers.
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<ServiceForSignalRHub>().AsImplementedInterfaces();
builder.RegisterType<...>().AsImplementedInterfaces();
builder.RegisterHubs(Assembly.GetExecutingAssembly());
IContainer container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
Однако призыв к.SetResolver(...)
является неоднозначным, поскольку существует как в пакетах интеграции MVC, так и в SignalR. Что теперь? Я не могу подтвердить, работает ли инъекция в мой сервис для используемого концентратора.
РЕДАКТИРОВАТЬ
Я могу настроить MVC5 с Autofac просто отлично. Я заблудился, как сделать то же самое с SignalR, используя интеграцию Autofac Signal NuGet. Пожалуйста, смотрите ниже.
Это мой стартовый класс:
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
var defaultFactory = LogManager.Use<DefaultFactory>();
defaultFactory.Directory("@D:\\NServiceBus\\ );
defaultFactory.Level(LogLevel.Debug);
var container = ConfigureAutofac(app);
ConfigureServiceBus(container, app);
app.UseAutofacMiddleware(container); // REGISTER WITH OWIN
app.UseAutofacMvc();
ConfigureAuth(app);
GlobalConfiguration.Configuration.UseSqlServerStorage("hangfire");
ConfigureSignalR(app);
}
}
Это часть, где я настраиваю SignalR:
public partial class Startup
{
public void ConfigureSignalR(IAppBuilder app)
{
var builder = new ContainerBuilder();
builder.RegisterHubs(Assembly.GetExecutingAssembly()).PropertiesAutowired();
builder.RegisterType<MaintenanceService>().As<IMaintenanceService>().PropertiesAutowired();
var container = builder.Build();
//var container = new AutofacContainer().Container;
var resolver = new AutofacDependencyResolver(container);
// Any connection or hub wire up and configuration should go here
app.MapSignalR(new HubConfiguration
{
Resolver = resolver,
EnableJSONP = true,
EnableDetailedErrors = true,
EnableJavaScriptProxies = true
});
builder.RegisterInstance(resolver.Resolve<IConnectionManager>());
}
}
Как это можно сделать правильно?