Я хочу вызвать методы моего клиента из контроллера /ServiceAssembly
В настоящее время я использую
//Notify Others of the Login
GlobalHost.ConnectionManager.GetHubContext<NotificationHub>().Clients.All.NotifyOthersAllOnLogin(string.Format("Recent Login({2}): {0} {1}", account.FirstName,account.LastName, account.LastLogin));
Но я хочу иметь возможность ввести экземпляр концентратора в контроллере, чтобы я мог использовать разные методы хаба.
Я использую StructureMap V3
для DependencyInjection.
Любая помощь/направление в этом отношении будет оценена
В SignalR есть учебник по инъекции зависимостей: http://www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection. Пример для NInject, но вы можете легко настроить его. То, что вам нужно запомнить, - это настроить контейнер DI перед инициализацией SignalR (отображение концентраторов).
Затем вы можете зарегистрировать свой контекст концентратора, чтобы иметь возможность его разрешить. Очень важно то, что вы регистрируете контекст концентратора после отображения концентраторов. Контекст концентратора может быть сохранен в переменной и сохранен до тех пор, пока вам нравится. Ваш метод настройки запуска будет выглядеть так:
public void Configure(IAppBuilder app)
{
var resolver = new MyStructureMapResolver();
// configure depdendency resolver
GlobalHost.DependencyResolver = this.container.Resolve<IDependencyResolver>();
// map the hubs
app.MapSignalR();
// get your hub context
var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
// register it in your structure map
ObjectFactory.Inject<IHubContext>(hubContext);
}
Чтобы ваш контекст хаба сильно набрал, вы можете сделать что-то вроде этого:
public interface INotificationHubContext {
void NotifyOthersAllOnLogin(string msg);
}
Затем вы делаете это:
// get your hub context
var hubContext = GlobalHost.ConnectionManager.GetHubContext<NotificationHub, INotificationHubContext>();
// register it in your structure map
ObjectFactory.Inject<IHubContext<INotificationHubContext>>(hubContext);
Надеюсь это поможет.