2015-09-03 2 views
2

Я в UserControl, который в основном выглядит следующим образом: enter image description hereWPF + Единство: UserControl с использованием сервисов?

Вы уже догадались, цель состоит в том, чтобы позволить пользователю выбрать файл/папку, при нажатии на Browse, а затем отобразить путь к файлу в TextBox.

Я начал свой первый полностью MVVM приложения (с помощью Prism + Unity), и я на самом деле является IDialogService, который позволяет мне показать MessageBox, но и отображать некоторые OpenFileDialog и SaveFileDialog.

Я хотел бы использовать реализацию, предусмотренную для этого IDialogService, чтобы отобразить пользователю мое диалоговое окно после выполнения команды «Обзор».

Поскольку UserControl не построен с Unity, как запросить реализацию?

ответ

0

Если вы правильно поняли, ваш UserControl должен овладеть контейнером Unity, который вы используете, так или иначе. Если вы сами создаете UserControl, вы можете добавить его как параметр конструктора; если он создан в рамках структуры, вы можете рассмотреть свойство Container или метод setter. Или вы можете пойти с контейнером в качестве сингла.

В любом случае предполагается, что ваш UserControl имеет поле, как так ...

IUnityContainer container; 

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

IDialogService service = container.Resolve<IDialogService>(); 
service.OpenFileDialog(...); 
+0

ОК, интересно узнать, что мы можем получить услугу напрямую с помощью «IUnityContainer». Что вы рекомендуете, чтобы получить экземпляр? Что-то вроде сингла? – J4N

+0

В моем собственном проекте я использую синглтон, да. (Что является проблемой в мире модульного тестирования, но что вы можете сделать.) –

+0

Альтернативой синглтону является создание свойства для некоторых объектов, которые по сути являются одноэлементным, например, объектом App. –