WebHostBuilderExtensions.UseStartup and dependency injection

64 views Asked by At

I am learning gRPC support in .NET. My goal is to implement a gRPC service hosted in .NET "Worker Service".

Based on the this tutorial now I have

in Program.cs:

Host.CreateDefaultBuilder(args)
    .UseWindowsService(options => options.ServiceName = "GrpcGreeter Service")
    .ConfigureServices(services =>
    {
        services.AddSingleton<IServiceNeededForStartup, ServiceNeededForStartup>();
        services.AddHostedService<GreeterWorker>();
    })
    .Build()
    .Run();

in GreeterWorker.cs:

public class GreeterWorker : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        await Host.CreateDefaultBuilder()
            .ConfigureServices(services => services.AddSingleton<IServiceNeededForStartup, ServiceNeededForStartup>())
            .ConfigureWebHostDefaults(builder => builder.UseStartup<Startup>())
            .Build()
            .StartAsync(stoppingToken);
    }
}

and in Startup.cs:

public class Startup
{
    private readonly IConfiguration configuration;
    //private readonly IServiceNeededForStartup serviceNeededForStartup;

    public Startup(IConfiguration configuration/*,
        IServiceNeededForStartup serviceNeededForStartup*/)
    {
        this.configuration = configuration;
        //this.serviceNeededForStartup = serviceNeededForStartup;
    }

, where (I)ServiceNeededForStartup is just my own C# interface and class.

This works fine until I try to get my serviceNeededForStartup injected in the Startup c'tor, i. e. when I uncomment commented code I'm getting

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Private.CoreLib.dll Unable to resolve service for type 'GrpcGreeter.Services.IServiceNeededForStartup' while attempting to activate 'GrpcGreeter.Startup'.

Is this possible to have my serviceNeededForStartup injected?

0

There are 0 answers