Я не могу заставить работать и концентратор, и мой репозиторий одновременно. Я считаю, что это потому, что для привязки используются два разных ядра. Когда я выполняю предлагаемое исправление, указанное ниже (одно ядро), клиентская сторона прекращает обработку широковещательных сообщений.
Я создал приложение на основе Тикер акций SignalR. Это сработало, как и ожидалось. Затем я выполнил внедрение зависимостей в SignalR для включения DI с Ninject. Это тоже сработало. Затем я добавил свой сервисный проект в решение. Добавлены мои привязки к NinjectWebCommon, чтобы включить репозитории моего сервиса. Я изменил свой одноэлементный класс, чтобы включить репозиторий.
public class AndonDisplay : IAndonDisplay
{
private readonly IReadOnlyRepository _repo;
private readonly AndonDisplayMsgSet _msgSet;
private readonly object _updateAndonDisplayLock = new object();
private volatile bool _updatingAndonDisplay = false;
public AndonDisplay(IHubConnectionContext<dynamic> clients, IReadOnlyRepository repo)
{
_repo = repo;
Clients = clients;
_msgSet = new AndonDisplayMsgSet { Advisory = "", Maintenance = "<div class='lblDT'>OK</div>", Supervisor = "OK", Materials = "OK" };
}
На данный момент синглтон никогда не вызывается. Никаких сообщений об ошибках, которые я мог видеть. Просто не звонил. Затем я внес предложенные изменения в ответ с наибольшим количеством голосов в сообщении, указанном ниже, «исходный вопрос ...». Это исправило все, кроме передачи Clients.All. Теперь он не обрабатывался на стороне клиента. У меня есть репо, которое работает в синглтоне. Я вижу, что вызывается Clients.All. Скрипт на стороне клиента никогда не выполняется.
Я нашел этот вопрос разработчиков... Исходный вопрос опубликован. Как заявляет разработчик в комментариях к последнему опубликованному "ответу"...
"... Я не знаю, как соединить две части вместе. В примере Stock Ticker вы создаете ядро в Startup.cs, но я также создаю ядро в NinjectWebCommon, и они не знают о друг друга. Dismissile 22 янв.
У кого-нибудь есть решение для этого?
Обновление:
Если я удалю .InSingletonScope() из моего оператора привязки:
kernel.Bind<IAndonDisplay>().To<AndonDisplay>(); //.InSingletonScope(); // Make it a singleton object.
тогда мой концентратор, в который внедрен IAndonDisplay, имеет полнофункциональный репозиторий?!?!
Вот мой NinjectWebCommon RegisterServices
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<AndonVistechContext>().ToSelf().InRequestScope();
kernel.Bind<IRepository>().To<EntityFrameworkRepository<AndonVistechContext>>().InRequestScope();
kernel.Bind<IReadOnlyRepository>().To<EfReadOnlyRepository.EntityFrameworkReadOnlyRepository<AndonVistechContext>>().InRequestScope();
kernel.Bind<IAndonDisplay>().To<AndonDisplay>(); //.InSingletonScope(); // Make it a singleton object.
kernel.Bind(typeof(IHubConnectionContext<dynamic>)).ToMethod(context => GlobalHost.DependencyResolver.Resolve<IConnectionManager>().GetHubContext<AndonDisplayHub>().Clients).WhenInjectedInto<IAndonDisplay>();
}
Я уверен, что упускаю что-то очевидное.