Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Autofac和Serilog时如何解决ILogger?_C#_Asp.net Core_Autofac_Serilog - Fatal编程技术网

C# 使用Autofac和Serilog时如何解决ILogger?

C# 使用Autofac和Serilog时如何解决ILogger?,c#,asp.net-core,autofac,serilog,C#,Asp.net Core,Autofac,Serilog,我有使用Serilog和Autofac的Asp.NETCore3应用程序。我得到以下异常: DependencyResolutionException:无法使用可用的服务和参数调用类型为“MyApp.Services.LoginService”的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数:无法解析构造函数“Void.ctor”的参数“Microsoft.Extensions.Logging.ILogger

我有使用Serilog和Autofac的Asp.NETCore3应用程序。我得到以下异常:

DependencyResolutionException:无法使用可用的服务和参数调用类型为“MyApp.Services.LoginService”的“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”的构造函数:无法解析构造函数“Void.ctor”的参数“Microsoft.Extensions.Logging.ILogger logger”(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();

我是不是错过了一步?

你不能注入
ILogger
,你必须注入
ILogger
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;
    }
}