English

はじめに

システムで用いる定数は「開発(for develop)」、「本番(for release)」などの実行環境に合わせて、
変更することが多くあります。
これは「ソースコードをコメントアウトする」などのような力技で実現は可能ですが、保守面では
  • 切り替えるべき定数が把握しづらい
  • 定数が複数ある場合、切り替え漏れが起きやすい
などの問題があり、要らぬトラブルを招くことになります。
これを解決するためにMConfigを開発しました。

仕様

  • 環境(開発、本番など)を定義し、環境別に定数を定義できます。
  • 実行時に、どの環境を使用するかを定義できます。
  • 定数名や個数に制限はありません。
  • 実行環境を動的に変えることはできません。

設定例

app.configに以下のように記述する。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <section name="mconfig" type="MConfig.MConfigSectionHandler, MConfig"/>
  </configSections>

  <mconfig>
    <!--実行環境-->
    <execution name="develop"/>

    <!--環境リスト-->
    <environments>
      <!--開発-->
      <environment name="develop">
        <settings>
          <setting name="FTPServer" value="localhost" tag="FTP" />
          <setting name="FTPUser" value="anonymous" tag="FTP"/>
          <setting name="FTPPassword" value="" tag="FTP"/>
          <setting name="DBServer" value="127.0.0.1" tag="DB" />
          <setting name="DBUser" value="debuguser" tag="DB"/>
          <setting name="DBPassword" value="debugpassword" tag="DB"/>
        </settings>
      </environment>

      <!--リリース-->
      <environment name="release">
        <settings>
          <setting name="FTPServer" value="x.x.x.x" tag="FTP" />
          <setting name="FTPUser" value="xxxxxxx" tag="FTP" />
          <setting name="FTPPassword" value="xxxxxxx" tag="FTP" />
          <setting name="DBServer" value="y.y.y.y" tag="DB" />
          <setting name="DBUser" value="yyyyyyy" tag="DB" />
          <setting name="DBPassword" value="yyyyyyy" tag="DB" />
        </settings>
      </environment>
    </environments>
  </mconfig>

</configuration>

execution 要素

  • name
実行環境名。必須。
environment要素の名前を指定してください。

environment要素

  • name
環境名。必須。
debug、develop、usertest、releaseなどを使用するとよいでしょう。

setting要素

  • name
設定名。必須。
  • value
設定値。必須。
  • tag
タグ。任意。
フレームワーク側では同値を参照していません。
イベントフック時の引数として渡されますので、分岐処理に利用してください。

実装例

実行環境名を取得する

MConfigReader.Instance.ReadEnvironmentName

設定値を取得する

GetConfigValueの引数に設定名を渡すと取得できます。
MConfigReader.Instance.ReadValue("FTPServer")

実践的に使うためのヒント

定数にアクセスするときコードスニペットが効かない

仕様上効きません。
ラッパークラスを作成し、同クラス(もしくはプロパティ)を経由してアクセスするとよいでしょう。
詳細はソースコードに添付してあるTestプロジェクトを参照ください。

※ Testはあくまでテスト用途のため、実用性のあるコードではありません。アイデアの1つだとお考えください。

平文がそのまま表示されるのは困る

セキュリティに関してはこのフレームワークの範疇ではありませんので直接はサポートしませんし、保証もしません。
ただ、以下の方法を適用することはできます。検討してください。
  • アプリケーション構成ファイルを暗号化する
  • アプリケーション構成ファイル上には暗号化された文字列を設定しておき、MConfigReaderクラスのOnReadConfigValueイベントをフックして同イベントにて復号化する。

NuGet

NuGetに対応しています。詳しくは以下のサイトを参照ください。
https://www.nuget.org/packages/MConfig/

Last edited Apr 19, 2014 at 2:31 AM by mk3008, version 17