Получить экземпляр HubContext для повторного использования в любом месте в основном приложении SelfHosted Asp.net - PullRequest
0 голосов
/ 20 мая 2019

У меня есть собственное приложение asp.net, работающее на консоли.Я могу отправить сообщение от моих клиентов c # windows form.Но я хочу отправить сообщение в любом месте моего класса сервера для клиентов.Не разовое сообщение.Поэтому мне нужен экземпляр hubcontext для его повторного использования.

Я использовал реализацию IHubContext, но я получаю исключение NullReference при использовании контекста концентратора.

Это мой концентратор.

 public class UniveraHub : Microsoft.AspNetCore.SignalR.Hub
{
    public string GetConnectionId()
    {
        return Context.ConnectionId;
    }

    public async Task SendMessage(string message)
    {
        await Clients.All.SendAsync("ReceiveMessage", message);
    }

}

Это мой класс запуска

   public class Startup
{

    public void Configure(IApplicationBuilder app)
    {

        app.UseSignalR(routes =>
        {
            routes.MapHub<UniveraHub>("/UniveraHub");
        });


    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSignalR();
        services.AddScoped<MyHubHelper>();
    }
}

Это мой класс HubHelper

 public class MyHubHelper 
{
    private readonly IHubContext<UniveraHub> _hubContext;

    public MyHubHelper(IHubContext<UniveraHub> hubContext)
    {
        _hubContext = hubContext;
    }

    public MyHubHelper()
    {

    }

    public void SendOutAlert(string msg)
    {
        _hubContext.Clients.All.SendAsync("ReceivedMessage", msg);
    }
}

Это program.cs, который использует мой вспомогательный класс для отправки сообщения клиентам

  MyHubHelper helper = new MyHubHelper();
  helper.SendOutAlert("Hi from server!");

1 Ответ

1 голос
/ 20 мая 2019

В Program.cs вы можете использовать, как показано ниже:

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateWebHostBuilder(args)
                    .Build();

        using (var scope = host.Services.CreateScope())
        {
            var services = scope.ServiceProvider;
            var helper = services.GetRequiredService<MyHubHelper>();
            helper.SendOutAlert("Hi from server!");
        }

        host.Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}
...