2

Я использую специальный класс для выполнения проверки в приложении WPF и определил класс, который наследуется от ValidationRule. Класс имеет зависимость, которую я бы хотел, чтобы AutoFac вводил во время выполнения, но дизайнеру Visual Studio 2010 XAML нужен конструктор без параметров для работы.Как вы можете заставить конструктор WPF/XAML работать с пользовательскими классами с зависимостями?

Кажется, единственное решение - создать DependencyProperty для зависимости и связать его в XAML, но это означает, что зависимость является общедоступной и изменяемой, ни одна из которых я не хочу.

Есть ли способ передать зависимость в класс, который вы собираетесь использовать в XAML, который будет делать все из следующего?

  • Не ломайте конструктора.
  • Сохраняйте зависимость частной.
  • Убедитесь, что зависимость установлена ​​до использования класса.

ответ

2

Как сильно вы хотите это сделать?

Особенности в XAML 2009 обеспечивают следующие элементы, которые могут помочь вам:

  • x:Arguments позволит вам передать аргумент конструктору. Может ли этот аргумент каким-то образом привязаться к свойству вашей модели представления?

  • x:FactoryMethod позволяет указать способ, который создает объект. Я предполагаю, что это может быть метод вашего окна или usercontrol, который будет иметь доступ к вашему контейнеру зависимостей.

Но вот в чем проблема: XAML 2009 можно загружать только во время выполнения через XAML Reader и не может быть скомпилирован. (См. Can't get the new 2009 XAML primitives working, why?).

Таким образом, глобальные статические объекты (eurgh) могут быть менее болезненным решением.


Позже Edit: Я перечитал свой вопрос, и понял, что вы поставили «Не сломать дизайнер», как один из вас требований. Это исключает XAML 2009 из возможных решений.

-2

Это отличный вопрос. Я использовал методы, демонстративные здесь, чтобы поддерживать работу дизайнера: http://jonas.follesoe.no/2008/07/24/youcard-re-visited-implementing-dependency-injection-in-silverlight/

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

+0

-1 от меня, потому что он не отвечает на конкретный вопрос. (Может быть, есть ответ где-то в блоге с блогами 2000 года, с которым вы связались, и в этом случае вы должны извлечь ответ и поместить его здесь) –

+0

Это очень интересное сообщение в блоге, и мы используем аналогичные методы, чтобы включить привязку ViewModel в XAML и чтобы AutoFac заботился о зависимостях. Проблема в том, что в конце он фактически не объявляет какие-либо пользовательские классы в XAML, он использует выражение привязки, и для моего конкретного примера мы говорим об использовании синтаксиса коллекции XAML для добавления элементов в свойство без setter. См. Здесь: http://msdn.microsoft.com/en-us/library/system.windows.data.binding.validationrules.aspx Спасибо, хотя. – andrej351