【发布时间】:2012-08-21 19:15:05
【问题描述】:
我们使用内部简单的 Logger 类来执行应用程序的日志记录任务 (.NET 3.5)。
记录器代码相当陈旧,其设计与此类似:
public class Logger : ILogger
{
private ILogger instance;
private static ILogger Instance
{
// Initialized on first use.
get { return instance; }
}
public static void Debug(string msg)
{
instance.Debug(msg);
}
public static void Error(string msg)
{
....
}
}
实例本身在第一次使用时被初始化(懒惰地)。
根据其严格的“书本”实现,这不是一个单例,但是,从所有调用代码对此类的访问是静态访问。
出于测试目的和其他架构原因,我希望能够用其他东西(注入)替换内部实例。
我怎样才能轻松做到这一点?我们目前没有使用任何 IoC 容器,但我不想将 setter 暴露给 Instance 属性,因为这会破坏整个 Singleton 式设计。
关于如何为此提出解决方案的任何建议?
【问题讨论】:
-
would not want to expose a setter to the Instance property since that would defeat the whole Singleton like design。不,它不会。您仍然可以使用默认实现对其进行初始化。 setter 只允许您在需要时/如果需要时替换它。
标签: c# .net design-patterns singleton