1 c#
I have a static class in the production. For some reason, we need to replace the logging part methods in this class.(Still a static class unchanged)
Now I want to pass a logger to it. The logger is from another class.
public static class OutputUtils
public static void LogInfo(string logMessage)
{
logger.LogInfo(logMessage);
}
Run Code Online (Sandbox Code Playgroud)
In another class, I have
private readonly ILogger _logger;
public AnotherClass(ILogger logger)
{
_logger = logger;
}
internal static void LogDebug(string logMessage)
{
OutputUtils.LogInfo(logMessage);
}
Run Code Online (Sandbox Code Playgroud)
是的,我想传递_logger给静态类OutputUtils。如何?
最简单的更改是将记录器添加为参数:
public static void LogInfo(ILogger logger, string logMessage)
{
logger.LogInfo(logMessage);
}
Run Code Online (Sandbox Code Playgroud)
我不会向类添加静态属性,因为如果多个客户端尝试设置该属性,则您必须考虑线程安全性。如果一个线程设置记录器,另一个线程将属性设置为其他某个记录器,并且第一个线程调用LogInfo将输出到另一个线程的记录器,那么您可能会遇到竞争条件。
但是这个方法的目的是什么?为什么客户不直接打电话logger.LogInfo(logMessage)?