gpt4 book ai didi

c# - 设计模式 : singleton with setting capabilities

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:21 24 4
gpt4 key购买 nike

对不起标题,我会尽力更好地解释这个问题。我已经为我的 log4net 实例创建了一个包装器,我使用以下构造函数实例化了这个记录器:

    public MyLogger(string _dbName)
{
dbName = _dbName;
logger = LoggerConfigurator.AddNamedLogger(dbName);
}

现在的问题是:这个构造函数在两个不同的类中被实例化,所以一些消息日志被打印了两次。仅当先前的实例不存在时,我才需要创建一个新实例,否则返回该实例。一种单例模式。问题是 Singleton 模式不接受参数,所以我没有办法传递 _dbName。我该如何按照最佳做法处理此问题?

最佳答案

如果我没理解错的话,您正在寻找 Multiton ( Multiton pattern on 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];
}
}
}

关于c# - 设计模式 : singleton with setting capabilities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21600243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com