0

I'm trying to register something on IServiceCollection during startup of my .NET 6 application:

public static class SomeRegistrationExtensions
{
  public static IServiceCollection RegisterSomething(
    this IServiceCollection services
  )
  {
    var sp = services.BuildServiceProvider();
    var logger = sp.GetService<ILogger>();
    
    logger.Log(
      LogLevel.Warning,
      "Nothing gets registered here..."
    );
    return services;
  }
}

My Program.cs is picking up the registration:

using AspNetCoreLoggerInServiceRegistration.Registrations;

var builder = WebApplication.CreateBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
builder.Services.RegisterSomething();

However, ILogger doesn't seem to be available:

Unhandled exception. System.ArgumentNullException: Value cannot be null. (Parameter 'logger')
   at Microsoft.Extensions.Logging.LoggerExtensions.Log(ILogger logger, LogLevel logLevel, EventId eventId, Exception exception, String message, Object[] args)
   at Microsoft.Extensions.Logging.LoggerExtensions.Log(ILogger logger, LogLevel logLevel, String message, Object[] args)
   at AspNetCoreLoggerInServiceRegistration.Registrations.SomeRegistrationExtensions.RegisterSomething(IServiceCollection services) in /SomeRegistrationExtensions.cs:line 12
   at Program.<Main>$(String[] args) in Program.cs:line 6

I created a repro on GitHub.

Alexander Zeitler
  • 11,919
  • 11
  • 81
  • 124
  • 1
    In https://stackoverflow.com/questions/41287648/how-do-i-write-logs-from-within-startup-cs the suggestions are to either log directly against NLog or similar if that's what's in use, or to create a new logger via logger factory: https://stackoverflow.com/a/61488490/455904 – Fredrik Ljung May 06 '22 at 10:40
  • @FredrikLjung Thanks, that's what I've been looking for (confirmation that I need to handle my own instance) – Alexander Zeitler May 06 '22 at 11:17

0 Answers0