1

複数のインスタンスを作成できるシングルトンのようなパターンの実現はありますか?

私のクラス定義は次のとおりです。

public class Logger
{
    private Logger(string logPath)
    {
        this.logPath = logPath;
    }


    /// <summary>
    /// Creates singleton 
    /// </summary>
    /// <param name="logPath"></param>
    /// <returns></returns>
    public static Logger GetInstance(string logPath)
    {
        lock (instanceLock)
        {
            if (logger == null)
            {
                logger = new Logger(logPath);
            }
        }
        return logger;
    }

    public static Logger Instance()
    {
        return logger;
    }

    /// <summary>
    /// Destructor
    /// </summary>
    ~Logger()
    {
        try
        {
            this.Close();
        }
        catch (Exception)
        {
        }
    }
}
4

2 に答える 2

6

複数のインスタンスを作成できるシングルトンのようなパターンの実現はありますか。

複数のインスタンスが必要な場合は、クラスを直接構築できるようにし、シングルトンにしないでください。あなたの場合、コンストラクターを公開し、シングルトン/インスタンスロジックを削除してください。

そうは言っても、単一のインターフェースを介して複数のインスタンスへのキー付きアクセスを可能にするMultiton パターンがあります。

于 2013-03-28T16:52:45.607 に答える
2

これは私が使用するパターンです:

public class Logger
{
    private Logger(...) { ... }

    static Logger { /* initialize Errors, Warnings */ }

    public static Logger Errors { get; private set; }
    public static Logger Warnings { get; private set; }

    public void Write(string message) { ... }
}

メソッドが必要な場合static Logger Lookup(string name)は、それも可能です。

Logger.Errors.Write("Some error");他のコードでは、 orを書くことができますLogger.Warnings.Write("Some warning");

おまけ:Environment.StackTraceメソッド内で使用して、Write呼び出し元のメソッドをさらにログに記録できますWrite

于 2013-03-28T16:56:41.703 に答える