Внедрить зависимость в представление через codebehind, используя UnityContainer - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть приложение Silverlight, где только несколько элементов управления используют MVVM. У меня не так много времени, чтобы переместить все элементы управления в mvvm, но мне нужно добавить некоторые службы в эти элементы управления.

Поскольку некоторые элементы управления создаются путем объявления их в XAML, например:

<UserControl>
<Grid>
<MyControlWithoutMVVM/>
</Grid>
</UserControl>

Я не вижу опции для внедрения зависимости с помощью Constructor Injection.

Но, возможно, я ошибаюсь, и именно поэтому я отправляю этот вопрос.

Есть ли какое-нибудь решение для этого?

Мой CompositionRoot находится в метоне ApplicationStartup в классе App.

1 Ответ

2 голосов
/ 17 февраля 2012

Если вы поместите элементы в свой код XAML, вы не сможете использовать инъекцию конструктора, поскольку вы не управляете созданием этих объектов.

Вы можете удалить создание элементов из XAML и получитьвзгляд на

  • Caliburn.Micro позволяет вам работать на основе ваших моделей представления и создает для вас представления (сначала viewmodel), либо позволяет работать с вашим пользовательским интерфейсом и разрешаетviewmodels (просмотр в первую очередь).

или

  • PRISM позволяет создавать пользовательский интерфейс и размещать элементы в регионах, позволяя создавать объекты с использованиемDI.

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

...