2

アプリケーションに関連するすべての操作パラメーターを含む構成ファイルApp.configを作成しました。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="MinConnectionCount" value="2"/>
    <add key="MaxConnectionCount" value="7"/>
  </appSettings>
</configuration>

これらの値を読み取り、アプリケーション全体で使用できるようにするには、次のようにクラスのAppSettingsプロパティを使用します。ConfigurationManager

try
{
    NameValueCollection myAppSettings = ConfigurationManager.AppSettings;

    byte min = byte.Parse(myAppSettings["MinConnectionCount"]);
    byte max = byte.Parse(myAppSettings["MaxConnectionCount"]);
}
catch (ConfigurationErrorsException e)
{
    throw e;
}

プロパティによって読み取られる値AppSettingsは文字列型であるため、必要な変換とチェックを実行する必要があります。

  • 解析エラーが発生しないように、適切な変換を行う必要があります。変換によって得られた値がアプリケーション ドメインと一致していることを確認すると役立つ場合があります。たとえば、接続の最小数は最大数より少なくなければなりません。
  • ロードされたパラメーターは、テーブル、キューなどのデータ構造を割り当てるために使用される可能性があるため、構成のロードを伴うものはすべて、アプリケーションの起動時に実行する必要があります。構成のロード中にエラーが発生した場合、アプリケーションは次を使用する必要があります。デフォルト設定: エラーはアラートによって報告される場合があります。
  • 最後に、構成は読み取り専用である必要があります。つまり、アプリケーションの実行中に変更してはなりません。これにより、複数のスレッドによるアクセスも簡素化されます。

これらの目標を達成するために、ファイルから構成をロードし、適切なプロパティを介して変換されたパラメーターを使用できるようにするクラスを作成しました。

public class MyConfiguration
{
    enum Errors
    {
        CONNECTION_RANGES_ERROR
        // some other errors
    }

    private byte m_MinConnectionCount;
    private byte m_MaxConnectionCount;

    private readonly List<Errors> m_ConfigErrors = new List<Errors>();

    public MyConfiguration()
    {
        try
        {
            NameValueCollection appSettings = ConfigurationManager.AppSettings;

            if (!SetConnectionRanges(appSettings["MinConnectionCount"], appSettings["MaxConnectionCount"]))
                m_ConfigErrors.Add(Errors.CONNECTION_RANGES_ERROR);

            // ...
        }
        catch (ConfigurationErrorsException e)
        {
            throw e;
        }
    }

    private bool SetConnectionRanges(string minCountStr, string maxCountStr)
    {
        if (byte.TryParse(minCountStr, out m_MinConnectionCount)
            && m_MinConnectionCount > 0
            && byte.TryParse(maxCountStr, out m_MaxConnectionCount)
            && m_MaxConnectionCount > m_MinConnectionCount)
            return true;

        m_MinConnectionCount = 2;
        m_MaxConnectionCount = 7;
        return false;
    }

    public byte MinConnectionCount { get { return m_MinConnectionCount; } }

    public byte MaxConnectionCount { get { return m_MaxConnectionCount; } }

    public List<Errors> GetErrors() { return m_ConfigErrors; }
}

このGetErrors()メソッドを使用すると、構成パラメーターのロード中に発生したエラーのリストを取得できます。ユーザーにはこれらのエラーが通知され、アプリケーションがパラメーターのデフォルト値を使用したことが通知される場合があります。

  1. アプリケーションの起動時にこのクラスが最初にインスタンス化されるようにするにはどうすればよいですか?
  2. このクラスにシングルトン パターンを適用できます。この方法Instanceでは、メソッドの最初のステートメントとしてプロパティを呼び出すだけMainです。しかしInstance、WPF アプリケーションのどこでプロパティを呼び出せばよいのでしょうか?
  3. シングルトン パターンを使用する代わりに、クラスのグローバル変数を作成し、メソッドの最初のステートメントとしてメソッドをMyConfiguration呼び出すことができます。しかし、WPF アプリケーションのどこでメソッドを呼び出せばよいのでしょうか?GetErrors()MainGetErrors()
4

1 に答える 1

1

クラスを に変更してstatic、そのインスタンスが 1 つになるようにします。

次に、表示する最初のフォームのイベントで呼び出しMyConfiguration.GetErrors()て、エラーを報告できます。Load

于 2012-07-09T10:54:57.597 に答える