将记录器传递给静态类

时间:2015-07-17 14:37:57

标签: c#

我在制作中有一个静态类。出于某种原因,我们需要替换此类中的日志记录部分方法。(仍然是静态类不变)

现在我想将记录器传递给它。记录器来自另一个类。

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。 怎么样?

1 个答案:

答案 0 :(得分:2)

最简单的更改是将记录器添加为参数:

public static void LogInfo(ILogger logger, string logMessage)
{
    logger.LogInfo(logMessage);
}

向类添加静态属性,因为如果多个客户端尝试设置属性,则必须考虑线程安全性。如果一个线程设置了记录器,则另一个线程将该属性设置为其他记录器,然后第一个线程调用LogInfo,然后输出到其他线程的记录器,则可能会出现竞争条件。

但这个方法的目的是什么呢?为什么客户只是拨打logger.LogInfo(logMessage)