【发布时间】:2014-08-04 14:43:08
【问题描述】:
我有一个静态日志管理器类,它应该基于参数返回所需记录器的实例。
public static class LogManager {
private static ILoggerFactory Factory { ... }
public static ILogger GetLogger(string name) {
return Factory.Create(name);
}
}
由于必须设置 ILoggerFactory 的具体实现(初始化),我想知道我是否应该只保留对实现类型的引用并在每次请求工厂时返回一个新实例 - 或者是否可以保留实现实例的静态引用。
版本 1
private static Type _factoryType;
public static void SetFactory<TFactory>()
where TFactory : ILoggerFactory, new()
{
_factoryType = typeof(TFactory);
}
private static Factory {
get { return (ILoggerFactory)Activator.CreateInstance(_factoryType);
}
public static ILogger GetLogger(string name) {
return Factory.Create(name);
}
第 2 版
private static ILoggerFactory _loggerFactory;
public static void SetFactory<TFactory>()
where TFactory : ILoggerFactory, new()
{
_loggerFactory = (ILoggerFactory)Activator.CreateInstance<TFactory();
}
public static ILogger GetLogger(string name) {
return _loggerFactory.Create(name);
}
【问题讨论】:
标签: c# design-patterns logging static factory-pattern