Я пытаюсь использовать 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)
});
Моя проблема в том, что, когда я использую интеграцию Autofac SignalR, я больше не могу получить контекст Контакта signalR на сервере (например, в контроллере webapi) и поэтому не может отправлять сообщения с серверной стороны подключенным клиентам. Что-то вроде следующего: как я это делаю, когда не использую интеграцию сигналов Autofac signalR:
var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.All.notification("Test Message");
Но это не сработает, когда я добавляю Autofac в микс - я не получаю сообщение об ошибке, и я действительно получаю hubContext, но называет его фактически не добирается до клиентов.
Если я прокомментирую использование распознавателя зависимостей для signalR в вызове MapSignalR, вызов GetHubContext снова работает, и сообщения успешно доходят до клиентов signalR, но, конечно, я больше не могу использовать IoC на своих концентраторах. например.
// Configure SignalR with the dependency resolver.
app.MapSignalR(new HubConfiguration
{
// Resolver = new AutofacDependencyResolver(container)
});
Может ли кто-нибудь сказать мне, почему использование 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/
он также кажется устаревшим.