我有一个注册其服务的库:
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()
?
在我的.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;
}