提问者:小点点

.NET Core 5.0-IServiceCollection.Configure和ILogger


我有一个注册其服务的库:

        public static IServiceCollection AddViewStringRenderer(this IServiceCollection services, string contentRootPath, ILogger logger)
        {
            services.Configure<RazorViewEngineOptions>(options => { options.ViewLocationExpanders.Add(new ViewLocationExpander(contentRootPath, logger)); });
            services.AddTransient<IRazorViewToStringRenderer, RazorViewToStringRenderer>();
            services.AddScoped<IEmailer, IlgEmailer>();
            return services;
        }

而且,正如您可能看到的,我需要服务的记录器。configure(...),因此它是此扩展方法的参数。

但是,由于该方法是在startup.configureReservices()中使用的,我们没有方法在.NET5中实例化ilogger。如何将记录器传递给services.configure()


共1个答案

匿名用户

在我的.NET5项目中,我注册了以下内容:

services.AddSingleton<ILoggerFactory, LoggerFactory>();
services.Add(ServiceDescriptor.Describe(typeof(ILogger<>), typeof(Logger<>), ServiceLifetime.Transient));

然后可以通过构造函数注入ilogger:

private readonly ILogger<MyClass> _logger; 

public MyClass(ILogger<MyClass> logger) {
  _logger = logger;
}