SignalR Core: контекст концентратора из метода статического контроллера

Я ищу способ вызвать метод из другого класса в моем проекте, который затем отправит сообщение всем клиентам, подключенным к mainHub

У меня есть статический метод, в котором я пытаюсь отправить данные всем клиентам, подключенным к mainHub, который является концентратором SignalR Core. Однако я могу получить контекст концентратора, поскольку этот метод является статическим, контекст этого концентратора требует ссылки на объект.

В обычном SignalR я мог использовать

var context = GlobalHost.ConnectionManager.GetHubContext<mainHub>();

Тогда я мог бы назвать это context.Clients.All. Однако в SignalR Core этого нет.

public class utils : Controller
{
    private readonly IHubContext<mainHub> _hubContext;

    public utils(IHubContext<mainHub> hubContext)
    {
        _hubContext = hubContext;
    }

    public static void addManagementLog(sstructs.ManageLog mngLog)
    {
        _hubContext.Clients.All.SendAsync("newManageLog", mngLog);
    }
}

Ссылка на объект требуется для нестатического поля, метода или свойства utils._hubContext

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


person Brian S    schedule 29.07.2019    source источник
comment
Это может ответить на вопрос; stackoverflow.com/questions/27299289/ или это: stackoverflow.com/questions/37318209/   -  person Nisarg    schedule 29.07.2019
comment
@Nisarg Я уже использую решение, представленное в этом вопросе, с помощью нового IHubContext‹› Однако проблема заключается в вызове этого в статическом методе.   -  person Brian S    schedule 29.07.2019
comment
Можете ли вы установить это в статическую переменную, когда получите ее в конструкторе?   -  person Nisarg    schedule 29.07.2019
comment
Правильно, это то, что, кажется, является проблемой. Я пробовал разные варианты: IHubContext<mainHub> cntxt = new IHubContext<mainHub>; cntxt.Clients.All.SendAsync("newManageLog", mngLog); Либо что-то не так с моим синтаксисом, либо я не могу создать статическую переменную IHubContext. Не удается создать экземпляр абстрактного класса или интерфейса IHubContext‹mainHub›   -  person Brian S    schedule 29.07.2019