Настройка Autofac для зависимости от SignalR Hub - PullRequest
1 голос
/ 20 марта 2012

Я хотел бы иметь возможность внедрить концентратор 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, но это кажется немного другой проблемой.)

1 Ответ

4 голосов
/ 20 марта 2012

Не создавать экземпляры концентратора. Точно так же вы не должны создавать экземпляры контроллера. В документации показано, как получить экземпляр клиентов концентратора за пределами концентратора.

Концентраторы за вызов, эквивалентно контроллеру в mvc на запрос, и вы не являетесь их создателем.

...