Я хотел бы иметь возможность вводить концентратор SignalR в другие классы в качестве зависимости, чтобы я мог отправлять ему сообщения с кода сервера (независимо от прямого вызова AJAX от клиента Javascript). Как это:Конфигурирование Autofac для зависимостей на концентраторе SignalR
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, но это похоже на немного другую проблему.)
Можете ли вы разместить регистрацию? Если у вас уже есть синглтон, который работает, Autofac может легко вводить его. –
Почему вы создаете экземпляр концентратора внутри контроллера? Просто позвоните в центр. – rball