C# 将记录器传递给静态类

C# 将记录器传递给静态类,c#,C#,我在制作课上有一节静态课。出于某种原因,我们需要替换此类中的日志部分方法。(仍然是一个静态类,未更改) 现在我想给它传递一个记录器。记录器来自另一个类 public static class OutputUtils public static void LogInfo(string logMessage) { logger.LogInfo(logMessage); } 在另一节课上,我有 private readonly ILogger _logger; public Anoth

我在制作课上有一节静态课。出于某种原因,我们需要替换此类中的日志部分方法。(仍然是一个静态类,未更改)

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

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);
}
是的,我想将
\u logger
传递给静态类
OutputUtils

如何更改?

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

public static void LogInfo(ILogger logger, string logMessage)
{
    logger.LogInfo(logMessage);
}
< >我不会向类添加静态属性,因为如果多个客户端尝试设置属性,则必须考虑线程安全性。然后,如果一个线程设置记录器,另一个线程将属性设置为另一个记录器,并且第一个线程调用
LogInfo
,这将输出到另一个线程的记录器,则可能会出现争用条件


但这种方法的目的到底是什么?为什么客户端不直接调用logger.LogInfo(logMessage)?

最简单的更改是将logger添加为参数:

public static void LogInfo(ILogger logger, string logMessage)
{
    logger.LogInfo(logMessage);
}
< >我不会向类添加静态属性,因为如果多个客户端尝试设置属性,则必须考虑线程安全性。然后,如果一个线程设置记录器,另一个线程将属性设置为另一个记录器,并且第一个线程调用
LogInfo
,这将输出到另一个线程的记录器,则可能会出现争用条件


但这种方法的目的到底是什么?为什么客户端不直接调用
logger.LogInfo(logMessage)

您计划每次登录一次还是每次都这样做?请记住,这根本不是线程安全的。这似乎是一个设计错误。您确定这就是您想要做的吗?您需要通过记录器以及mesage。调用
OutputUtils.LogInfo
似乎是多余的,因为另一个类
已经有了您想要使用的记录器。通过从另一个类调用
LogDebug
@Slugart中调用
\u logger.LogInfo(logMessage)
,可以获得相同的结果。静态类是一个基本实用程序(类似于框架)。您计划每次登录一次还是每次登录都这样做?请记住,这根本不是线程安全的。这似乎是一个设计错误。您确定这就是您想要做的吗?您需要通过记录器以及mesage。调用
OutputUtils.LogInfo
似乎是多余的,因为另一个类
已经有了您想要使用的记录器。通过从另一个类调用
LogDebug
@Slugart中调用
\u logger.LogInfo(logMessage)
,可以获得相同的结果,静态类是一个基本实用程序(框架的一种)。理论上,客户端调用是可能的。但是静态类在产品中(它不会被更改为非静态),还有400多个引用它。在所有方法中,它都被引用。我的ILogger也是由NLOG创建的。我听说它可以克服竞争条件?理论上,客户电话是可能的。但是静态类在产品中(它不会被更改为非静态),还有400多个引用它。在所有方法中,它都被引用。我的ILogger也是由NLOG创建的。我听说它能克服比赛条件吗?