Как разрешить ILogger при использовании Autofa c и Serilog? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть Asp. Net Приложение Core 3 с использованием Serilog и Autofa c. Я получаю следующее исключение:

DependencyResolutionException: ни один из конструкторов, найденных с 'Autofa c .Core.Activators.Reflection.DefaultConstructorFinder' для типа 'MyApp.Services.LoginService', не может быть вызывается с доступными службами и параметрами: Не удается разрешить параметр 'Microsoft.Extensions.Logging.ILogger logger' конструктора 'Void .ctor (Microsoft.Extensions.Logging.ILogger)'.

Пока я иметь следующее:

В 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();

В Autofac модуле:

        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();

В контроллере:

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;
    }
}

А в сервисе (в отдельном проекте):

public class LoginService : ILoginService
{
    private readonly ILogger logger;

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

Я пропускаю шаг по пути?

...