Prism: Inyectar servicio en un constructor sin parámetros.
Tengo tres clases:
- MyModel (objeto POCO puro)
- MyModelWrapper (heredado de BindableBase)
- MyViewModel (también hereda de la clase Bindable)
El problema que tengo es que necesito un constructor sin parámetros en MyModelWrapper porque enlazo un objeto en MyViewModel que es una ObservableCollection<MyModelWrapper>
a un Datagrid Itemssource, y si no tiene un constructor sin parámetros, no puedes insertar nuevas filas en el mismo (no aparece una línea en blanco al final del Datagrid).
Por lo tanto, si quiero que el usuario pueda insertar nuevas filas, necesito un constructor sin parámetros (y quiero hacerlo).
Y aquí tengo mi problema: Necesito inyectar un servicio en MyModelWrapper.
Puedo inyectar el servicio en el constructor:
IMyModelWrapperService Service;
public MyModelWrapper(IMyModelWrapperService Service)
{
Service = service;
}
Pero de esta manera, el Datagrid no permite al usuario insertar nuevas filas.
Si pudiera obtener una referencia al contenedor, podría hacer container.Resolve<IMyModelWrapper>()
, pero creo que también necesitaría inyectar el contenedor a través del constructor, por lo que no es una solución válida.
Entonces, necesitaría algo como:
[Inject]
IMyModelWrapperService Service;
Pero creo que la inyección de propiedades no funciona en Prism (al menos no puedo usarla).
¿Cuál es el enfoque correcto para inyectar un servicio en una clase que necesita ser sin parámetros en Prism?
Gracias
davy.ai
Una posible solución podría ser usar un patrón de fábrica para crear instancias de
MyModelWrapper
. La fábrica tendría acceso al contenedor y podría resolver las dependencias necesarias antes de devolver la nueva instancia. De esta manera, la claseMyModelWrapper
sigue teniendo un constructor sin parámetros, y el servicio puede ser inyectado a través de la fábrica.La fábrica podría ser así:
Entonces, en
MyViewModel
, en lugar de crear nuevas instancias deMyModelWrapper
directamente, puedes usar la fábrica:De esta manera, cuando se crea una nueva instancia de
MyModelWrapper
a través de la fábrica, se inyectarán las dependencias necesarias, y la unión con ObservableCollection funcionará correctamente.