Config generi c концентратор при запуске ASP. NET Core 3 - PullRequest
1 голос
/ 08 февраля 2020

У меня есть универсальный c концентратор:

public class SendRequestToUserSignalR<T, HubContext> where T : class where HubContext : Hub
{
    private readonly IUserConnectionManager userConnectionManager;
    private readonly IHubContext<HubContext> hubContext;

    public SendRequestToUserSignalR(IUserConnectionManager userConnectionManager , IHubContext<HubContext> hubContext)
    {
        this.userConnectionManager = userConnectionManager;
        this.hubContext = hubContext;
    }
}

И мне нужно установить его при запуске:

app.UseSignalR(routes =>
{
    routes.MapHub<SendRequestToUserSignalR<,>>("/sendRequest");
});

Но это не работает, и я получаю это ошибка:

Использование универсального c типа 'SendRequestToUserSignalR' требует 2 аргументов типа

Как мне решить эту проблему?

1 Ответ

3 голосов
/ 12 февраля 2020

Для меня ваша конфигурация полностью неверна.

Вам не нужно определять generi c class как концентратор:

public class SendRequestToUserSignalR : Hub
{
    public SendRequestToUserSignalR(...services)
    {
        // code goes here...
    }
}

В методе ConfigureServices вы необходимо запустить службу:

services.AddSignalR();

В методе Configure вы сопоставляете этот концентратор внутри UseEndpoints метод:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");

    endpoints.MapHub<SendRequestToUserSignalR>("/sendRequest");
});

Примечание: app.UseSignalR метод устарел в asp. net ядро ​​версии 3.x

...