Я немного запутался с вашими терминами ModelView и ViewModel. В MVVM есть только модель, представление и модель представления.
В этой статье говорится об абстрагировании окна сообщения, чтобы вы могли запускать модульные тесты, не блокируя сервер сборки, пока он ожидает взаимодействия с пользователем.
В реализации используется делегат Func
, но вы можете сделать это так же легко, используя интерфейс. Тогда подходом будет создание собственных перечислений, а затем преобразование их для реализации интерфейса MessageBox.
1008 * Е.Г. *
public enum ConfirmationResult
{
Yes,
No,
Cancel
..etc
}
public enum ConfirmationType
{
YesNo,
OkCancel
..etc
}
public interface IConfirmation
{
ConfirmationResult ShowConfirmation(string message, ConfirmationType confirmationType)
}
public class MessageBoxConfirmation : IConfirmation
{
ConfirmationResult ShowConfirmation(string message, ConfirmationType confirmationType)
{
// convert ConfirmationType into MessageBox type here
// MessageBox.Show(...)
// convert result to ConfirmationResult type
}
}
Тогда ваши модели представлений будут принимать IConfirmation в качестве зависимости (в их конструкторе, например), а в модульных тестах вы можете заблокировать интерфейс IConfirmation, чтобы всегда возвращать определенный результат из метода ShowConfirmation.
Вы также можете перегрузить метод ShowConfirmation, чтобы предоставить опции для изображений, заголовков окон и т. Д.