我正在使用类库,其中每个类必须共享一个记录器类的单个实例。记录器不是我的,即它是我引用的dll。共享是必要的,因为所有消息都必须附加到实例化记录器时创建的单个日志消息文件的末尾。
我考虑过在实例化后通过引用传递logger类,但这会导致一些非常难看的依赖项。
我在枪口下,没有太多时间去试验。关于实现这一目标的最佳方法的任何建议?我认为静态类可能就是答案,但我所采取的任何实施都需要一些时间,而且我不想在一条死胡同里走下去。
=======================更新===================
我认为这是处理这个问题的最快捷,最干净的方法:
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);
}
}
答案 0 :(得分:2)
创建一个静态类,并实现单例模式肯定会对你有用,虽然它不是最简洁的方法。由于耦合使得单元测试等更加困难。
替代方法是使用依赖注入容器,例如autofac。
这是一个快速教程,他们使用DI创建使用简单的记录器类: http://stevescodingblog.co.uk/dependency-injection-beginners-guide/
答案 1 :(得分: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")
来自代码中的任何位置。