ドメイン駆動開発_フォルダー構成編_#27_外部の設定ファイルの値で判断する

当サイトではアフィリエイト広告を利用しています。

NDDD

現在,IsFakeの値がShareに固定値で設定されています。

namespace NDDD.Domain
{
    public static class Shared
    {
        public static bool IsFake { get; } = true;
    }
}

これでは,コンパイルしないとFakeかどうかを切り替えることができません。それでは,実行ファイルからのテスト時に,面倒なので,外部から値を変更できるようにしておくのがいいでしょう。今回はやり方を解説していきます。

アプリケーション構成ファイルを追加する

コンパイルなしで設定を変更できるようにするために,設定ファイルを作成します。設定ファイルはどこからでも見られるようにしておきたいのでDomain層に配置します。

ドメインプロジェクトを右クリックして,「追加」「新しい項目」の順に選択します。

「アプリケーション構成ファイル」を選択し,名前を「NDDD.config」として,追加ボタンを押下します。NDDD.configという名前でなくてもいいのですが,基本的にはアプリケーション名にしておくのがわかりやすいと思います。

これで,「NDDD.config」という名前のファイルが追加されました。

作成されたファイルの<configuration></configuration>の部分は不要なので,その2行を削除します。

代わりに,<appSettings></appSettings>と打ち込みます。

IsFakeの項目を追加する

appSettingsの中に,IsFakeの項目を追加します。

これで,IsFakeという項目で,値が”0”の設定値が完成しました。こういった設定は好きなだけ追加することができます。これでファイルの作成は完了です。この状態でctrl+Sでファイルを保存しておきます。

「常にコピーする」に設定する

NDDD.configファイルを選択して,プロパティを表示し,「出力ディレクトリ」を「常にコピーする」に変更します。これで実行環境にこのファイルがコピーされて出力されることになります。コンパイル後は,このコピーされたファイルの値を変更することで,コンパイル後でも設定値を変更することができます。

WinFormのApp.configを変更する

WinFormプロジェクトに「App.config」というファイルがあるので,ダブルクリックで内容を表示します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>

  <appSettings configSource="NDDD.config">
  </appSettings>
</configuration>

appSettingsの部分を追加します。これで,アプリケーションの設定はNDDD.configファイルで行えるようになります。

Sharedで設定ファイルの値を読み込む

SharedクラスのIsFakeに固定値を設定していますが,これを,今作成した設定ファイルNDDD.configから読み込むように変更します。次のようにコードを変更します。

using System.Configuration;

namespace NDDD.Domain
{
    public static class Shared
    {
        public static bool IsFake { get; } = 
         ConfigurationManager.AppSettings["IsFake"] == "1";

    }
}

設定ファイルのIsFakeの値が”1”の時のみ,SharedのIsFakeをTrueとしています。 このままだと,次のように,ConfigurationManagerがコンパイルエラーになっているので,参照設定にSystem.Configurationを追加します。

ドメインプロジェクトを右クリックして,参照の追加を選択します。

アセンブリを選択し,右上の検索窓に「conf」と入力します。そうすると,System.Configurationというのが出てくるので,そこにチェックをいれて「OK」ボタンを押下します。

あとは,上部にusing System.Configuration;を追加すると,コンパイルエラーは解消します。これで,Sharedで設定ファイルのIsFakeの値が読めるようになりました。

ブレークポイントを置いて検証する

FactoriesのIsFakeを使用している部分にブレークポイントを置いて画面を実行すれば,IsFakeに設定ファイルの値が取得できることが確認できます。うまく設定ファイルの値が取得できていない場合は,ソリューションから「ソリューションのクリーン」を行ってから実行してみてください。

ブレークポイントの部分でIsFakeの部分にカーソルを当てると,設定ファイルの値になっていることが確認できます。

実行ファイルから検証する

VisualStudioの「Factories」クラスなどをコード表示した状態で,画面上部のタブの部分を右クリックして,「このアイテムのフォルダーを開く」を選択します。

そうすると,ソースコードの存在するフォルダーが表示されます。この階層から移動して,WinFormプロジェクトがあるフォルダーを開いてください。

NDDD.WinFormをダブルクリックして中を表示します。

続いて「bin」フォルダーを開きます。

Debugモードで実行していれば,Debugを開きます。Releaseモードの時はReleaseを開きます。

その中に,「NDDD.config」ファイルが生成されているのでそのファイルを開きます。

するとVisualStudioで編集していたのと同じファイルが作成されているため,この中のIsFakeを変更することで,コンパイル後でも,値を変更することができます。

ちなみに,フォルダーから実行する場合は「NDDD.WinForm.exe」を実行すると,アプリケーションが起動します。設定ファイルを変更して,アプリケーションを起動したときの動きの違いが確認してみてください。こんな感じで,コンパイル後も値を変える可能性のある項目は,設定ファイルに項目をどんどん追加していってみてください。