2012-03-19 2 views
1

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

+0

Можете ли вы разместить регистрацию? Если у вас уже есть синглтон, который работает, Autofac может легко вводить его. –

+0

Почему вы создаете экземпляр концентратора внутри контроллера? Просто позвоните в центр. – rball

ответ

4

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

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

+0

Спасибо, Дэвид! – blaster

Смежные вопросы