抱歉,标题,我将尽力更好地解释问题。我已经为我的log4net实例创建了一个包装器,并使用以下构造函数实例化了该记录器:
public MyLogger(string _dbName)
{
dbName = _dbName;
logger = LoggerConfigurator.AddNamedLogger(dbName);
}
现在的问题是:此构造函数在两个不同的类中实例化,因此某些消息日志被打印两次。仅当先前的实例不存在时,才需要创建一个新实例,否则返回该实例。一种单例模式。问题在于,Singleton模式不接受参数,因此我没有办法通过_dbName
。遵循最佳做法,我该如何处理?
如果我对您的理解正确,那么您正在寻找Multiton(维基百科上的Multiton模式)。每个键基本上是一个单例(这是Wikipedia上的C#示例):
using System.Collections.Generic;
using System.Collections.Concurrent;
namespace MyApplication
{
class FooMultiton
{
private static readonly ConcurrentDictionary<object, FooMultiton> _instances
= new ConcurrentDictionary<object, FooMultiton>();
private FooMultiton() {}
public static FooMultiton GetInstance(object key)
{
_instances.TryAdd(key, new FooMultiton()); // This would of course be new MyLogger(_dbName)
return _instances[key];
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句