Доступ к сервисам Mock в режиме дизайна в Silverlight 4 - PullRequest
0 голосов
/ 09 марта 2011

Мой запрос похож на этот .

Я использую MvvmLight, и информация Viewmodel отображается правильно для времени разработки и выполнения.Однако я хочу абстрагировать его в класс Service.Итак, у меня есть Mock Service и реальная служба, которые оба реализуют IService.

в коде для app.xaml. Я проверяю на время разработки, затем вызываю метод на моем загрузчике службы в зависимости от того, что возвращает проверка.*

if (IsInDesignModeStatic)
            {
                ServiceLoader.LoadDesignTimeServices();
            }
            else
            {
                ServiceLoader.LoadRunTimeServices();

            }


public sealed class ServiceLoader
    {
        private ServiceLoader()
        {
        }

        public static void LoadDesignTimeServices()
        {
            ServiceContainer.Instance.AddService<IQuestionsService>(new dt.QuestionsService());
        }

        public static void LoadRunTimeServices()
        {

            ServiceContainer.Instance.AddService<IQuestionsService>(new rt.QuestionsService());

        }
    }

Это прекрасно работает во время выполнения, но не во время разработки.Если я на самом деле использую конкретную реализацию designtime в моей viewmodel:

if (IsInDesignMode)
            {

                //var s = Infrastructure.GetService<IQuestionsService>();
                var s = new ReadmissionTrackingApplication.Client.Services.DesignTime.QuestionsService();

                QuestionCollectionView_Refresh(s.getQuestions());
            }
            else
            {
                //Listens for New Questionairre request. It receives the current ReadmitPatientResult
                Messenger.Default.Register<fnReadmitPatientList_Result>(this, ReceiveNewQuestionairreRequest);

                //TODO for testing only
                ReceiveNewQuestionairreRequest(null);

            }

, она появляется в Blend.Что мне нужно сделать, чтобы разрешить доступ к фиктивному сервису в blend?Кажется, я помню, что читая, мне нужно каким-то образом добавить загрузчик сервисов в ресурсы моего приложения, аналогично тому, как это делается с моделями представления ... но я не знаю точно, как это нужно сделать, я предполагаю, что это отличается от того, как выполняется виртуальная машина,потому что я не обращаюсь к сервису в представлении, но из модели представления.

1 Ответ

0 голосов
/ 10 марта 2011

Проблема в том, что Blend не выполняет весь код. Чтобы проверить это, вы можете присоединить отладчик (из Visual Studio 10 к Blend 4, убедившись, что вы выбрали Managed Code V4.0) и поместить точку останова в код установки. Вероятно, это не вызывается.

Чтобы решить эту проблему, вы можете попробовать выполнить настройку в ViewModelLocator. Поскольку VML создается в ресурсах App.xaml, Blend выполняет этот код. Например, вы можете поместить установочный код в статический конструктор VML.

Ура, Laurent

...