我在制作中有一个静态类。出于某种原因,我们需要替换此类中的日志记录部分方法。(仍然是静态类不变)
现在我想将记录器传递给它。记录器来自另一个类。
public static class OutputUtils
public static void LogInfo(string logMessage)
{
logger.LogInfo(logMessage);
}
在另一堂课中,我有
private readonly ILogger _logger;
public AnotherClass(ILogger logger)
{
_logger = logger;
}
internal static void LogDebug(string logMessage)
{
OutputUtils.LogInfo(logMessage);
}
是的,我想将_logger
传递给静态类OutputUtils
。
怎么样?
答案 0 :(得分:2)
最简单的更改是将记录器添加为参数:
public static void LogInfo(ILogger logger, string logMessage)
{
logger.LogInfo(logMessage);
}
我不向类添加静态属性,因为如果多个客户端尝试设置属性,则必须考虑线程安全性。如果一个线程设置了记录器,则另一个线程将该属性设置为其他记录器,然后第一个线程调用LogInfo
,然后输出到其他线程的记录器,则可能会出现竞争条件。
但这个方法的目的是什么呢?为什么客户只是拨打logger.LogInfo(logMessage)
?