Можно ли вызывать SignalR IConnectionManager внутри моих контроллеров mvc3?

Я работаю над проектом MVC3 и использую карту структуры привязки для своей инъекции зависимостей. Все было на месте, за исключением того, когда я начал использовать SignalR, когда я не могу реализовать свой DI, как на моих контроллерах. Я уже несколько дней гуглил о реализации структурной карты внедрения зависимостей в SignalR, но не нашел надежного примера того, как это сделать. Похоже, что все, кто использует SignalR, используют Ninject.

Моя цель состоит в том, чтобы иметь условные операторы (что требует от меня внедрения сервисов) внутри моего концентратора перед вызовом моих клиентских методов, но мне это не удалось.

Я не хотел, чтобы эта вещь задерживала мою разработку, поэтому я исследовал альтернативные способы, а затем обнаружил, что на самом деле могу вызывать свои клиентские методы из своих контроллеров, используя следующие коды:

 IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
 dynamic clients = connectionManager.GetClients<MyHub>();
 clients.myClientScript();

Это работает для меня, но я не уверен, что это хороший подход, особенно если я использую внедрение зависимостей.

Итак, мой вопрос: можно ли продолжать вызывать это внутри моего контроллера? У вас есть лучший подход?

Спасибо


person dmc    schedule 26.03.2012    source источник
comment
Я пропустил ваш другой вопрос (stackoverflow.com/q/9790433/701062). Туда перенесен пример структуры.   -  person Gary.S    schedule 26.03.2012


Ответы (1)


Нет никаких причин, по которым вы не можете отправлять информацию подключенным клиентам с вашего контроллера с помощью SignalR, однако текущий клиент не увидит эту информацию (из-за отсутствия подключения во время публикации).

Тем не менее, добавить Structuremap в SignalR на самом деле довольно просто. Вы можете точно увидеть, как это сделать, в моем ответе здесь: https://stackoverflow.com/a/9866374/701062 .

person Gary.S    schedule 26.03.2012
comment
Спасибо @Gary.S. На самом деле я пытался реализовать структурную карту с помощью signalR таким образом, но я использовал var container = (IContainer) IoC.Initialize(); AspNetHost.SetResolver (новый StructureMapDependencyResolver (контейнер)); в AppStart. - person dmc; 26.03.2012
comment
Теперь я попробовал ваш AspNetHost.SetResolver(StructureMap.ObjectFactory.GetInstance‹IDependencyResolver›()); на AppStart, но я получаю недопустимые аргументы - person dmc; 26.03.2012