2010-03-09 9 views
11

¿Cuál es la mejor forma de inyectar dependencias de forma transparente (utilizando el contenedor IOC) a los controles del usuario en WPF?¿Cómo puedo inyectar dependencias a los controles del usuario en WPF

Supongo que los controles de usuario son parte de XAML para la ventana u otros controles de usuario. También creo que el padre (quien sea que sea) no debería ser responsable de esto. La solución para inyectar manualmente dependencias de padres no parece lo suficientemente limpia para mí. Quiero evitar explícitamente la administración de las dependencias de mis componentes, ya que hace que se convierta en una idea de IOC.

¿Hay algún evento que se produzca cuando se crea un árbol lógico para poder interceptarlo e inyectar mis dependencias?

EDIT: por dependencias también significa modelo de vista, controlador, Presentador (cualquiera que sea el patrón se utiliza)

Gracias, Andrey

Respuesta

0

Una de las formas posibles de resolver el problema es ir con el enfoque "ViewModel First" y utilizar la convención sobre la configuración.

Build Your Own MVVM Framework por Rob Eisenberg proporciona más detalles sobre este

8

La mejor manera de hacer frente a las dependencias en WPF es siguiendo el MVVM pattern.

En resumen, no se inyectan dependencias directamente en los controles de usuario (vista), sino en su DataContext (modelo de vista).

+0

Claro, pero modelo de vista es sólo ejemplo de la dependencia –

+0

Entonces, ¿cómo habría que inyectar modelo de vista de control de usuario? –

+0

Establezca la propiedad DataContext. –

0

FrameworkElement tiene un evento Inicializado, que puede conectar e inyectar las dependencias. Debería probar si llega lo suficientemente temprano para su escenario.

+0

Parece que ocurre mientras se ejecuta view ctor (desde InitializeComponent). _container.Resolve () mainView.Initialized + = mainView_Initialized; // nunca sucede mainView.Show(); –

1

La forma en que lo hice es tener una clase de aplicación general que inyecta dependencias en su clase viewmodel (suponiendo que use el patrón de diseño MVVM?) - use un contenedor DI como Unity. Consulte el Marco de aplicaciones de WPF (http://waf.codeplex.com/) que contiene ejemplos de ese escenario que está describiendo.

+0

No estoy seguro Entiendo cómo accede a los controles de usuario desde la aplicación. De todos modos, esto es lo que quiero evitar: administrar dependencias. –

+0

La inyección de dependencias puede ser atendida por un contenedor de dependencia como Unity. No conozco su caso específico, pero parece que no está utilizando el enlace de datos (por no hablar de MVVM). Si es así, le recomiendo que investigue estos aspectos aún más: gran parte del poder de WPF se debe a estas técnicas. – TanvirK

+0

no, estoy usando MVVM, pero esto no importa. Y la pregunta es la causa de inyectar dependencias usando el contenedor IOC (nuevamente no importa cuál). –

0

tuve problemas con este bloque cuenta también:

También pienso padre (quien quiera que sea) no debe ser responsable de esto.

¿Entonces quién lo hará? El objetivo de IoC es que algo más (padre, modelo de vista, algo, ...) defina las dependencias.

+0

viejo Lo sé, pero lo que él está buscando es una buena solución para * activar * la inyección de esas dependencias por el contenedor 'IoC'. – LuckyLikey

Cuestiones relacionadas