Creación de instancias de ViewModels y clases de servicio.
Intenté comprender la creación de instancias de ViewModels y las clases de servicio y lo escribí para otros. Por favor, corrija / agregue donde sea necesario.
La creación de instancias de ViewModels and Services no se realiza de la manera más común. Se hace utilizando la reflexión.
En el TipCalc tienes:
public class FirstViewModel : MvxViewModel
{
private readonly ICalculationService _calculationService;
public FirstViewModel(ICalculationService calculationService)
{
_calculationService = calculationService;
}
...
}
y
public class App : Cirrious.MvvmCross.ViewModels.MvxApplication
{
public override void Initialize()
{
CreatableTypes()
.EndingWith("Service")
.AsInterfaces()
.RegisterAsLazySingleton();
...
}
}
Durante Inicializar () Las interfaces y clases diseñadas como Servicio (nombre termina con Servicio) se emparejan utilizando la reflexión y los nombres de interfaz y clase (IPersonService y PersonService). Esto se usa más tarde para revertir la búsqueda de la instancia de la clase (la tabla de búsqueda contiene referencias perezosas a las instancias singleton de las clases de servicio. Los servicios se crean cuando son nulos.
FirstViewModel público (ICalculationService computingService) hace referencia a una instancia de CalculationService. Esto se hace utilizando la tabla de búsqueda creada anteriormente.
La creación de instancias de ViewModels se realiza a través del marco Mvx. Cuando se 'pide' el MvxFramework para un ViewModel instanciado, reflejará el ViewModel y determinará qué constructores hay en esa clase. Si hay un constructor sin parámetros, entonces se usará. Si hay un constructor con un parámetro y el parámetro es la interfaz de una clase de servicio, la instancia (singleton) de ese servicio se utilizará como parámetro.
Los servicios son instanciados de manera similar; sus constructores reflejados y parámetros instanciados (singleton). Y así.