2013-10-05 89 views
3

我有一个WPF应用程序,它可以接受命令行参数。我想在ViewModel中使用这个命令行参数,我有以下选项来做到这一点。如何在viewmodel中使用命令行参数(MVVM模型)wpf应用程序

1)在app.xaml.cs中创建公共静态变量。读取main方法中的命令行参数值并将其分配给公共静态变量。可以使用App.variablename在viewmodel中进行访问。 2)创建像System.Environment.SetEnvironmentVariable(“CmdLineParam”,“u”)这样的环境变量,稍后在Environment.GetEnvironmentVariable(“CmdLineParam”)中将其用于viewmodel中。

我想问问考虑MVVM模式哪种方法是好的,以及是否有更好的方法来实现这一点。

回答

11

我不认为这个问题与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 
    } 
} 

所有你现在要做的就是创建并在运行时插入生产环境服务(自己传递h由IoC容器创建它等)。并使用假/模拟单元测试。

相关问题