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í.

Respuestas a la pregunta(1)

Su respuesta a la pregunta