Реализация интерфейса данных времени разработки

У меня есть класс ViewModel, как это

public class MyViewModel : ViewModelBase
{
    public MyViewModel()
    {
        if (!IsInDesignMode)
        {
            throw new InvalidOperationException();
        }
    }

    public MyViewModel(IDataProvider dataProvider)
    {
        Data = new ObservableCollection<IData>(dataProvider.GetData());
    }

    public ObservableCollection<IData> Data { get; private set; }
}

Теперь я хочу создать некоторые данные времени проектирования. В своих модульных тестах я использую для этого макетную среду (Moq). Мне не нравится тот факт, что мне нужно создать некоторую Mock-реализацию IData в моем проекте App или ссылаться и использовать Mocking Framework.

Каков наиболее элегантный способ достижения данных времени проектирования в таком сценарии?

Изменить: Не уверен, если это актуально, но я использую Visual Studio 2012.

1 ответ

Решение

По сути, вы создаете заглушку, а не макет для данных времени проектирования. Заглушка не может иметь никаких зависимостей.

public class MyDesignViewModel : ViewModelBase
{
    public MyViewModel()
    {
        Data = new ObservableCollection<IData>(new List<IData>() 
        {
             new MyData() { Value1 = 1, Value2 = "Test" },
             ...
        });
    }

    public ObservableCollection<IData> Data { get; private set; }
}

Затем используйте его в XAML следующим образом:

<UserControl x:Class="MyView"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DataContext="{d:DesignInstance Type=vm:MyDesignViewModel, IsDesignTimeCreatable=True}">
Другие вопросы по тегам