如何在WPF应用程序的ViewModel(MVVM模型)中使用命令行参数

5
我有一个WPF应用程序,可以接收命令行参数。我想在ViewModel中使用这个命令行参数,以下是我的几种选择:
1)在app.xaml.cs中创建公共静态变量。在main方法中读取命令行参数的值并将其赋值给公共静态变量。这样就可以通过App.variablename访问它。
2)创建环境变量,如System.Environment.SetEnvironmentVariable("CmdLineParam", "u"),然后在ViewModel中使用Environment.GetEnvironmentVariable("CmdLineParam")。
我想问一下,在考虑MVVM模式的情况下,哪种方法更好?是否有更好的方法来实现这个功能?
1个回答

18

我不认为这个问题与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容器创建等方式)。而在单元测试中使用一个虚拟/模拟的服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接