Not able to inject SignalR IHubContext into class

3

I'm new to using SignalR and having troubles trying to inject IHubContext into a class. I get an exception as shown below when I try to run the code. It errors out on the line where I try to inject TimerEventHandler in startup.cs Here is the code:

public class TimerEventHandler : ITimerEventHandler
    {
        private readonly IConfiguration _config;
        private readonly IHubContext<IndexHub> _hubContext;
    
        public TimerEventHandler(IHubContext<IndexHub> hubContext,
                                 IConfiguration config)
        {
            _hubContext = hubContext;
            _config = config;            
        }
    }
  

ITimerEventHandler

public interface ITimerEventHandler
{
    Task OnTimedEvent(object source, ElapsedEventArgs e, string connectionId);
}

And here is code from my Startup.cs

public void ConfigureServices(IServiceCollection services)
{            
   services.AddSignalR(o =>
   {
      o.EnableDetailedErrors = true;
   });
   services.AddScoped<ITimerEventHandler, TimerEventHandler>();            
}

Code from indexhub

public class IndexHub : Hub
{       

    private readonly IServiceBusHelper _serviceBusHelper;
    private readonly ITimerEventHandler _timerEventHandler;
    

    public IndexHub(IServiceBusHelper serviceBusHelper,
                  ITimerEventHandler timerEventHandler)
    {
        _serviceBusHelper = serviceBusHelper;
        _timerEventHandler = timerEventHandler;
    }
    ....

}

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

The exception I'm getting is:

> System.AggregateException
  HResult=0x80131500
  Message=Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: my.portal.Hubs.ITimerEventHandler Lifetime: Scoped ImplementationType: my.portal.Hubs.TimerEventHandler': Unable to resolve service for type 'Microsoft.AspNet.SignalR.IHubContext`1[my.portal.Hubs.IndexHub]' while attempting to activate 'my.portal.Hubs.TimerEventHandler'.)
  Source=Microsoft.Extensions.DependencyInjection
  StackTrace:
   at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(IEnumerable`1 serviceDescriptors, ServiceProviderOptions options)
   at Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(IServiceCollection services, ServiceProviderOptions options)
   at Microsoft.Extensions.DependencyInjection.DefaultServiceProviderFactory.CreateServiceProvider(IServiceCollection containerBuilder)
   at Microsoft.Extensions.Hosting.Internal.ServiceFactoryAdapter`1.CreateServiceProvider(Object containerBuilder)
   at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
   at Microsoft.Extensions.Hosting.HostBuilder.Build()
   at my.portal.Program.Main(String[] args) in Program.cs:line 10

Can any of you experts out there help out?

c#
asp.net-core
asp.net-core-signalr
asked on Stack Overflow Oct 1, 2020 by doritoslover • edited Oct 2, 2020 by doritoslover

1 Answer

2

So I figured it out! I had installed the Microsoft.AspNet.SignalR.Core package instead of Microsoft.AspNetCore.SignalR.Core package. Thanks @Rena for looking at this. Just you getting me to look more closely at my code and try to strip it down to the basics helped me solve this.

answered on Stack Overflow Oct 2, 2020 by doritoslover

User contributions licensed under CC BY-SA 3.0