5

コマンド ライン パラメーターを使用できる WPF アプリケーションがあります。ViewModel でこのコマンド ライン パラメーターを使用したいのですが、それには次のオプションがあります。

1) app.xaml.cs に public static 変数を作成します。main メソッドでコマンド ライン パラメータ値を読み取り、それを public static 変数に割り当てます。App.variablename を使用してビューモデルでアクセスできます。

2) System.Environment.SetEnvironmentVariable("CmdLineParam", "u") のような環境変数を作成し、後で Environment.GetEnvironmentVariable("CmdLineParam") を使用してビューモデルで使用します。

MVVMパターンを考慮してどのアプローチが良いのか、これを達成するためのより良い方法があるかどうかを尋ねたい.

4

1 に答える 1

16

この問題は MVVM とはまったく関係がないと思います。コマンド ライン引数をビュー モデルで使用できるようにする良い方法は、(コンストラクター) サービスを注入することです。それを呼びましょうIEnvironmentService

public interface IEnvironmentService
{
  IEnumerable<string> GetCommandLineArguments();
}

次に、実装は次を使用しますEnvironment.GetCommandLineArgs(現在のプロセスのコマンドライン引数を含む文字列配列を返します)。

public class MyProductionEnvironmentService : IEnvironmentService
{
  public IEnumerable<string> GetCommandLineArguments()
  {
    return Environment.GetCommandLineArgs();
  }
}

ビューモデルは次のようになります。

public class MyViewModel
{
  public MyViewModel(IEnvironmentService service)
  {
    // do something useful here
  }
}

あとは、実行時に本番環境サービスを作成して挿入するだけです (自分で渡す、IoC コンテナーで作成するなど)。そして、ユニットテストには偽物/モックを使用してください。

于 2013-10-05T11:44:37.193 に答える