Как MVVM повлияет на мой доступ к контексту моего домена? - PullRequest
0 голосов
/ 26 января 2011

Я собираюсь взять приложение, написанное мной в Silverlight / C # / RIA Services, и сделать его более надежным, выполняя его в MVVM для тестирования. У меня такой вопрос: для того, чтобы формы могли легко добавлять / удалять / обновлять элементы, я создал статический ресурс в файле с именем DomainService.xaml, на котором основаны все запросы служб ria.

<ds:MyDomainContext x:Key="MyDomainContext" />

Это позволило мне иметь все запросы, использующие один и тот же контекст, чтобы у меня не возникало ошибок, связанных с тем, что сущность присоединяется к одному контексту и на которую влияет другой контекст, работающий с той же сущностью. Мой DomainDataSources в итоге выглядел примерно так:

<riaControls:DomainDataSource AutoLoad="True" Name="discountsDataSource" LoadSize="10" DomainContext="{StaticResource MyDomainContext}" QueryName="GetDiscounts" />

Эта практика, похоже, сработала довольно хорошо. Но я не вижу ничего подобного в мире MVVM. Как уровень данных для приложения MVVM поддерживает весь контекст? Смогу ли я по-прежнему использовать пейджеры данных так же легко, как и раньше, или для этого потребуется большое количество кода для подключения?

1 Ответ

0 голосов
/ 27 января 2011

Я бы рекомендовал использовать контейнер Depndency Injection / IoC для управления вашими объектами.Я лично обнаружил, что Unity отлично подходит для этой цели.Вам просто нужно указать контейнеру использовать менеджер времени жизни, который хранит один объект, а затем в каждом классе вы запрашиваете этот объект у UnityContainer.

Например, для Unity:

// Upon creation of the container
IUnityContainer container = new UnityContainer();
container.RegisterType<MyDomainContext>(new ContainerLifetimeManager());

// In your individual model classes
container.Resolve<MyDomainContext>();

AsПока вы передаете контейнер между классами (что довольно просто, если вы используете контейнер для конструирования всех объектов вашей модели), то решение Всегда будет возвращать тот же контекст, который вы запрашивали.

...