Использование Moq во время разработки Blend - PullRequest
5 голосов
/ 25 марта 2010

Это может быть немного, но предположим, что я хочу использовать Moq во ViewModel для создания некоторых данных времени разработки, например так:

public class SomeViewModel
{
   public SomeViewModel(ISomeDependency dependency)
   {
      if (IsInDesignMode)
      {
         var mock = new Mock<ISomeDependency>();
         dependency = mock.Object; // this throws!  
      }
   }
}

Макет может быть настроен на что-то, но вы поняли.

Моя проблема заключается в том, что во время разработки в Blend этот код генерирует исключение InvalidCastException с сообщением типа «Невозможно привести объект типа» Castle.Proxies.ISomeDependencyProxy2b3a8f3188284ff0b1129bdf3d50d3fc «типу ISomeDependency». Хотя это не обязательно связано с Moq, но связано с Castle, но я надеюсь, что пример Moq поможет;)

Есть идеи, почему это так?

Спасибо!

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Раньше я думал, что мне нужно проделать подобную хитрость, но после долгих экспериментов и поисков обнаружил, что Blend 4 теперь может создавать образцы данных времени разработки на основе существующего класса.

Это фактически дает вам фиктивный класс, который выглядит так же, как ваш класс VM, так что вы можете добавить свою привязку и т. Д.

Он работает достаточно хорошо, поэтому мы рекомендуем эту технику.

Возможный недостаток этого заключается в том, что если вам нужна ваша настоящая виртуальная машина для выполнения какой-либо интерактивности, то, конечно, прокси-сервер не может этого сделать - вам придется вручную изменить значения или переключиться на другой объект времени разработки. Но на практике я редко сталкивался с таким сценарием. В большинстве случаев вы устанавливаете состояние виртуальной машины, а затем целую вечность получаете правильный взгляд.

1 голос
/ 04 августа 2011

Обновление : выпущено на github: https://github.com/GeniusCode/GeniusCode.Components.DynamicDuck

Я также столкнулся с подобной проблемой, когда пытался использовать замок для макетов моделей представления во время разработки. Мы написали собственную библиотеку msil duck / mock, и она хорошо работает для этой цели.

Я писал об этом здесь: http://blogs.geniuscode.net/JeremiahRedekop/?p=255

Мы работаем над выпуском библиотеки под MS-PL и развертыванием на GitHub.

1 голос
/ 26 мая 2010

У меня похожая проблема, за исключением того, что приведение происходит из динамически сгенерированной сборки (Blend_RuntimeGeneratedTypesAssembly), которая маскируется под один из моих типов.

Без видимой причины.

Который сводит меня с ума.

...