C# 使用Autofac和Serilog时如何解决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)“ 到目前为止,我有以下几点: 在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
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;
}
}