Как получить ссылку на дочерний контейнер в View Model - PullRequest
0 голосов
/ 01 июня 2010

Я пытаюсь поделиться службой данных (Entity Manager), обернутой в хранилище из ViewModel (называемой «AVM») в модуле A, в ViewModel (называемую «BVM») в модуле B, и я не могу заставить это работать. Мы используем PRISM / Unity 2.0

Это мой сценарий:

Пользователь может открывать несколько экранов клиента (составной вид в виде мини-оболочки) друг с другом заказчик (единица работы). Мы реализуем это, используя дочерние контейнеры. Каждый дочерний контейнер разрешает свой собственный репозиторий со своим собственным менеджером сущностей (репозиторий является одноэлементным в дочернем контейнере). Это делается в модуле A. В основной оболочке есть главный менеджер области, и каждый экран Customer со своим дочерним контейнером создает область области действия. На каждом экране клиента есть вид «AV» (подключенный к ViewModel «AVM») с SubRegion (элемент управления вкладками), зарегистрированный как «SubRegion». Мы создаем это с 'Screen Factory'

В модуле B у нас есть клиентские заказы в представлении «BV» и ViewModel «BVM». В конструкторе модуля B мы получаем основной контейнер путем инъекции. В методе initialize мы разрешаем (главный) менеджер области и регистрируем View 'BV' вместе с ним. В конструкторе View 'BV' ViewModel 'BVM' внедряется / создается.

Теперь это работает, но ViewModel 'BVM' не может получить дочерний контейнер. Это только главный контейнер. Это выполнимо, или я должен сделать это по-другому?

Спасибо, Нильс

1 Ответ

0 голосов
/ 22 июня 2010

Есть несколько возможностей:

Мой любимый вариант - делать это целиком внутри подшивки для моделей, специализированной для Ioc - это то, что вам придется делать в любом случае. Мне нравится модель, которую использует Autofac, и код объясняет ее довольно кратко .

Я не имею представления об Unity - я не касался этого с v1.1. Если вы катитесь самостоятельно, один из методов - взять созданный дочерний контейнер и зарегистрировать его в TLS . Затем вы можете переопределить функциональность связывания модели Ioc, чтобы перейти к сохраненному дочернему контейнеру TLS. Довольно хакерский, но я не уверен в другом. В первую очередь, я бы выбрал вариант №1. Рассматривайте вариант № 2 как единственный способ исследовать варианты относительно единства.

...