Я хотел бы иметь возможность внедрить концентратор SignalR в другие классы в качестве зависимости, чтобы я мог отправлять ему сообщения из кода сервера (независимо от прямого вызова AJAX из клиента Javascript). Как это:
private readonly IMyApplicationHub _signalHub;
public HomeController(IMyApplicationHub signalHub)
{
_signalHub = signalHub;
}
Однако я не знаю, как сказать Autofac, какой экземпляр хаба использовать - это не тот экземпляр, который создается, когда реальный клиент открывает свое соединение.
Я обнаружил, что, если я хочу сослаться на «настоящий» экземпляр концентратора, который использует SignalR, я должен сохранить свою собственную ссылку Singleton и установить ее в первый раз, когда метод (в данном случае, Init) вызывается из реального клиента Javascript.
public class MyApplicationHub : Hub, IMyApplicationHub
{
public static MyApplicationHub SingleInstance = null;
public void Init(string message)
{
SingleInstance = this;
}
internal void SendMessage(string message, IEnumerable<LinkDto> links)
{
Clients.siteReceived(message);
}
}
Я должен что-то упустить. Любая помощь будет оценена! (В конце концов, я также хотел бы знать, как конструировать зависимости инжектирования в сам концентратор SignalR, но это кажется немного другой проблемой.)