En mi aplicación WPF utilizo el patrón MVVM junto con la inyección de dependencia.Datos obsoletos en MVVM ViewModels con inyección de dependencia
Los ViewModels que preparan datos de la base de datos obtienen el repositorio inyectado en el constructor. También completan las propiedades con los datos del repositorio en el constructor.
Los ViewModels se crean todos en el constructor estático de la clase ViewModelLocator que todas las Vistas usan para vincular a su ViewModel.
Esto tiene las siguientes desventajas:
- Los datos de las vistas no se actualiza nunca, ni siquiera cuando se cierra y volver a abrirlos, porque la instancia modelo de vista es siempre la misma.
- Al abrir la primera vista, todos los Modelos de Vista se instancian y los datos que requieren se cargan de la base de datos.
me ocurren dos maneras de resolver estos problemas:
- Haga cada modelo de vista implementar un método que lee los datos de la base de datos e inicializa las propiedades - en lugar de hacerlo en el constructor. Esto requeriría llamar a ese método cada vez que se abra una vista. Esto introduce temporal coupling que no me gusta.
- Implemente el ViewModelLocator de tal forma que cree el modelo de vista solicitado cada vez que se llame a la propiedad correspondiente en ViewModelLocator. No me gusta este método, porque mi raíz de composición no se ejecutará al inicio del programa, sino que se extenderá durante toda la vida de la instancia del programa.
¿Hay alguna otra forma de resolver este problema? ¿Cómo están solucionando esto los demás?
Gracias por su respuesta. Tener una fábrica para cada uno de mis modelos ViewModels parece ser un poco exagerado, ya que las fábricas solo se usarían en un lugar y no son necesarias actualmente. Además, no hacen nada más que 'container.Resolve '. Como ViewModelLocator aún sería el único lugar donde se usaría el contenedor, prefiero llamar 'container.Resolve' sobre las fábricas abstractas, porque incluso en este caso el contenedor no se filtraría en el código de la aplicación. La única ventaja de las fábricas abstractas que puedo pensar sería un error inmediato al inicio (cont.) –
(cont.) Si la configuración del contenedor no fuera correcta. –