我在WPF应用程序中实现MVVM,我很难决定在何处以及如何存储我的配置数据(从xml文件加载),因此可以在每个View Model中访问它。所以我想出的是:
static class Configurations
{
private static List<object> Container = new List<object>();
public static void LoadConfigurations() { }
public static List<object> GetConfiguration(string configuration)
{
-- return the needed subelement --
return Container(configuration);
}
}
我正在考虑使用静态类,因为可以在视图模型之间传递任何数据的情况下访问它。 我只需要在应用程序启动时调用 Configurations.LoadConfigurations(),并在需要时调用 Configurations.GetConfigurations()。
所以我的问题是,这是处理这种情况的好方法还是不好的做法?
不要介意代码的正确性,它仅用于示例目的。
答案 0 :(得分:1)
所以我的问题是,这是处理这种情况的好方法还是不好的做法?
取决于:)但是如果您希望能够对视图模型进行单元测试,那么您还希望能够模拟配置设置。在这种情况下,最好使用注入视图模型类的共享服务。
该服务应实现一个接口:
public interface IConfiguration
{
List<object> GetConfiguration(string configuration);
}
public class Configurations : IConfiguration
{
private readonly List<object> Container = new List<object>();
public List<object> GetConfiguration(string configuration)
{
-- return the needed subelement --
return Container(configuration);
}
}
然后,您可以在单元测试中简单地提供此接口的另一个实现:
IConfiguration config = new Configurations(); //or any other implementation...
ViewModel vm = new ViewModel(config);
查看型号:
public class ViewModel
{
public ViewModel(IConfiguration config)
{
var config = config.GetConfiguration("...");
//...
}
}