How to resolve ILogger when using Autofac and Serilog?

Viewed 1956

I have Asp.Net Core 3 app using Serilog and Autofac. I'm getting the following exception:

DependencyResolutionException: None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'MyApp.Services.LoginService' can be invoked with the available services and parameters: Cannot resolve parameter 'Microsoft.Extensions.Logging.ILogger logger' of constructor 'Void .ctor(Microsoft.Extensions.Logging.ILogger)'.

So far I have the following:

In Program.cs:

        Log.Logger = new LoggerConfiguration()
           .Enrich.FromLogContext()
           .MinimumLevel.Debug()
           .WriteTo.Console(
               LogEventLevel.Verbose,
               "{NewLine}{Timestamp:HH:mm:ss} [{Level}] ({CorrelationToken}) {Message}{NewLine}{Exception}")
               .CreateLogger();

In an Autofac module:

        builder.RegisterType<LoggerFactory>()
            .As<ILoggerFactory>()
            .SingleInstance();

        builder.RegisterGeneric(typeof(Logger<>))
            .As(typeof(ILogger<>))
            .SingleInstance();

        builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies())
            .Where(t => t.Name.EndsWith("Service"))
            .AsImplementedInterfaces()
            .InstancePerLifetimeScope();

In a controller:

public class LoginController : ControllerBase
{
    private readonly ILogger<LoginController> logger;
    private readonly ILoginService loginService;

    public LoginController(
        ILogger<LoginController> logger, 
        ILoginService loginService)
    {
        this.logger = logger;
        this.loginService = loginService;
    }
}

And in a service (in a separate project):

public class LoginService : ILoginService
{
    private readonly ILogger logger;

    public LoginService(ILogger logger) 
    {
        this.logger = logger;
    }
}

Am I missing a step along the way?

0 Answers
Related