c# - 我可以在没有 LoggerFactory 的情况下直接注入 ILogger
问题描述
从 IoC 的角度来看,我们应该能够轻松设置和选择接口的实现。
如果我创建自定义实现ILogger
,我可以直接将它注入到没有ILoggerFactory-ILoggerProvider-ILogger
结构的控制器中吗?
通过这种方式,我可以减少设置开销,并对 Logger 进行更多控制。例如,我可以投射和访问CustomProperty
. 相反,ILoggerFactory-ILoggerProvider-ILogger
chain创建的记录器会维护一个ILogger
s的集合,我不能再访问我的CustomLogger
了。
代码如下所示。这是一个可行的解决方案吗?
定义 CustomLogger
public class CustomLogger : ILogger
{
public CustomPropertyType CustomProperty;
public CustomLogger(){...}
public IDisposable BeginScope<TState>(TState state){...}
public bool IsEnabled(LogLevel logLevel){...}
public void Log<TState>(
LogLevel logLevel,
EventId eventId,
TState state,
Exception exception,
Func<TState, Exception, string> formatter)
{
// Use some info from CustomProperty in while sending the log
}
}
设置依赖注入
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<ILogger, CustomLogger>();
//Other logic
}
访问ILogger
withCustomLogger
实现
public ExampleController(ILogger logger)
{
this.logger = logger;
this.customProperty = (CustomLogger)logger.CustomProperty;
}
解决方案
推荐阅读
- linux - ffmpeg 改变输出的顺序
- c# - 当我尝试使用 ExecuteQueryReq 查询时,CUCM axl api 返回 system.object
- keyboard - 在 BIOS 中重新映射键盘
- python - 在为新列分配新值时如何根据开始和结束值列表循环索引
- ios - 如何将控制台打印语句保存到 Xcode 中的文本文件?
- reactjs - 如何在模糊上测试 formik yup 验证错误?
- r - 如何将多个分类变量重新组合成一个新变量
- javascript - Jest Test Visual Studio 代码调试器抛出“错误没有这样的文件”异常
- opencart - 代码更改 - 我在网站上没有看到
- python - 如何从 Python 中的字符串中提取整数或浮点值?