Я думаю, я немного заблудился: у меня есть узел сигнализации, который получает услугу с ограниченным объемом («подписка-услуга»), вводимая через DI. Эта услуга "подписка-служба" получает введенный hubxontext и дополнительные "заданные" доменом c услуги и пытается подписаться на различные наблюдаемые c, определяемые доменом, которые эти услуги предоставляют. В отдельных обратных вызовах из наблюдаемых я хочу вызывать методы в контексте концентратора, чтобы иметь возможность уведомлять клиента, когда операции CRUD были выполнены.
Моя проблема в том, что обратные вызовы запускаются только в том случае, если внедренный домен -услуги имеют "одиночный" срок службы.
В моем Startup.cs Я настроил все свои службы как "ограниченные":
services.AddScoped<IMaterialTypeService, MaterialTypeService>();
services.AddScoped<IMaterialTypeRepository, MaterialTypeDbRepository>();
services.AddScoped<WebApiSubscriptionService>();
services.AddScoped<IEmailService, EmailService>();
services.AddScoped<INotificationService, NotificationService>();
Метод подключения вверх подписки (в «подписке-сервисе») выглядит следующим образом:
private void Startup()
{
_notificationService.Notifications.Subscribe(notification =>
{
_hubContext.Clients.All.Notify(notification);
});
_materialTypeService.MaterialTypesChanged.Subscribe(materialTypes =>
{
var matTypes = _mapper.Map<IList<MaterialTypeResponseDto>>(materialTypes);
_hubContext.Clients.All.MaterialTypesChanged(matTypes);
});
}
Что мне здесь не хватает?
Почему бы не выполнить обратный вызов внутри вызываемой подписки? Все службы охватываются и запускаются одним и тем же веб-запросом.
Моя конструкция такова, что я хочу иметь n доменных служб, и когда что-то происходит (CRUD) внутри любой из доменных служб, я хочу их to pu sh - сообщение Observable, если упомянутая выше служба подписки может подписаться на этот Observable, а в обратном вызове pu sh сообщение через signalr.