0

我正在使用一个类库,其中每个类都必须共享一个记录器类的单个实例。记录器不是我的,即它是我引用的 dll。共享是必要的,因为所有消息都必须附加到在实例化记录器时创建的单个日志消息文件的末尾。

我想过在实例化后通过引用传递记录器类,但这会导致一些非常丑陋的依赖关系。

我在枪下,没有太多时间进行实验。关于实现这一目标的最佳方法的任何建议?我在想一个静态类可能是答案,但我承担的任何实施都需要一些时间,我不想走上死胡同。

======================= 更新 ===================

我认为这是处理这个问题的最快和最干净的方法:

    public class Logger
{
    private static LoggerTool _loggerTool;

    public static void WriteLogMessage(string message)
    {

        if (_loggerTool == null)
        {
            // Create a new log file
            string logFileName = "LogFile-" + DateTime.Now.ToString("HHmmss");

            _loggerTool = new LoggerTool(logFileName);
        }

        _loggerTool.LogMessage(message);
    }
}
4

2 回答 2

2

创建一个静态类并实现单例模式肯定对您有用,尽管它不是最简洁的方法。由于耦合,它使得单元测试等变得更加困难。

另一种方法是使用依赖注入容器,例如 autofac。

这是一个快速教程,他们使用 DI 创建使用简单的记录器类:http: //stevescodingblog.co.uk/dependency-injection-beginners-guide/

于 2013-01-25T01:26:24.730 回答
2

就像是:

public static class LogManager
{
    private static Lazy<MyLog> logLazy = new Lazy<MyLog>(() => new MyLog());
    public static MyLog Log
    {
        get{
            return logLazy.Value;
        }
    }
}

然后

LogManager.Log.Warning("blah") 

从代码中的任何地方。

于 2013-01-25T01:31:04.783 回答