2

CsvConfiguration プロパティにシングルトン ポリシーを適用しようとしています。

構成が既に利用可能な場合は、構成を返すだけです。それ以外の場合は、構成を取得して同じものを返すと、このコードをビルドできます。

    public Rootpdf pdfConfiguration
    {
        get
        {
            Rootpdf pdfConfiguration = null;
            try
            {
                if (pdfConfiguration == null)
                {
                    //retrieve the configuration file.
                    //load the configuration and return it!
                }
                else
                {
                    return pdfConfiguration;
                }
            }
            catch (Exception e)
            {
                Log.Error("An error occurred while reading the configuration file.", e);
            }

            return pdfConfiguration;
        }
    }

利点 (希望): 私の pdfConfiguration が必要なときはいつでも、既に利用可能であれば、それを返すことができます。毎回構成ファイルをロードして構成を計算する必要はありません。

私の質問: resharper! リシャーパーは、コードが

   if (pdfConfiguration == null) //The expression is always true.

私がこのシングルトンパターンに従っていることを理解していないのは、本当に resharper の問題ですか?

また

私はシングルトンパターンに従っていませんか?

4

7 に答える 7

6

get 句の先頭でシングルトンを null に設定しています。

Rootpdf pdfConfiguration = null;
//THIS IS THE PROBLEM.

注: 99% の確率で、ReSharperあなたより賢いです。私はそれが好きではありませんが、それは本当です。

于 2013-08-07T08:59:12.813 に答える
3

クラスは次のようになります。

public class RootPdf
{
    private static RootPdf instance;

    private RootPdf()
    {
        //retrieve the configuration file.
        //load the configuration and return it! 
    }

    public static RootPdf Instance
    {
        get
        {
            if (instance == null)
            {
                try
                {
                    instance = new RootPdf();
                }
                catch (Exception e)
                {
                    Log.Error("An error occurred while reading the configuration file.", e);
                    return null;
                }
            }
            return instance;
        }
    }
}

オブジェクトを呼び出す方法は次のとおりです。

var pdf = RootPdf.Instance;
于 2013-08-07T09:09:12.547 に答える
1
class MySingletonClass 
{
    private static UserSettings instance = null;

    /// <summary>
    /// Default protected constructor.
    /// </summary>
    protected MySingletonClass()
    {
    }

    /// <summary>
    /// Invoke the singleton instance.
    /// </summary>
    public static MySingletonClass Instance()
    {
        if (instance == null)
            instance = new MySingletonClass();
        return instance;
    }
}

これは次のように呼び出されます/インスタンス化されます

MySingletonClass msc = MySingletonClass.Instance();

アクセサー/プロパティを使用してインスタンスを返すこともできます

public MySingletonInstance Instance
{
    get 
    {
        if (instance == null)
            instance = new MySingletonInstance();
        return instance;
    }
}

これが呼び出される/インスタンス化される場所

MySingletonClass msc = MySingletonClass.Instance;

上記の最初の方法が好きです。

これが役立つことを願っています。

于 2013-08-07T09:05:11.263 に答える