The following MWE works as expected but it will raise errors if I change
class Program
tostatic class Program
GetRequiredService<ILogger<Program>>()
toGetRequiredService<ILogger>()
Question
How to get the injected ILogger
for a static class?
Minimal Working Example (MWE)
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
class Application
{
readonly ILogger logger;
public Application(ILogger<Application> logger) => this.logger = logger;
public void Say(string str)
{
Console.WriteLine(str);
logger.LogError(str);
}
}
class Program
{
static void Main(string[] args)
{
using (var services = ConfigureServices())
{
services.GetRequiredService<ILogger<Program>>().LogInformation("Main");
services.GetRequiredService<Application>().Say("Hello World");
}
}
static ServiceProvider ConfigureServices()
{
IServiceCollection sc = new ServiceCollection()
.AddLogging(x => x.AddConsole())
.AddTransient<Application>();
return sc.BuildServiceProvider();
}
}
Unhandled Exception: System.InvalidOperationException: No service for type 'Microsoft.Extensions.Logging.ILogger' has been registered. at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Logging.Program.Main(String[] args) in F:...\LoggingPractice\Program.cs:line 24 Press any key to continue . . .