Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Como o MVVMcross lida com a reflexão durante a construção de objetos


Como o MVVMcross lida com a reflexão durante a construção de objetos


O MVVMcross utiliza reflexão extensivamente durante a construção de objetos, particularmente através de sua inversão de controle (IOC), que é gerenciada pela instância `mvx.iocprovider` singleton. Aqui está uma visão geral detalhada de como o MVVMcross lida com a reflexão durante a construção de objetos:

injeção de construtor

O MVVMCROSS suporta a injeção do construtor, que permite resolver automaticamente parâmetros durante a construção de objetos usando a reflexão. Ao criar um objeto, o MVVMCROSS executa as seguintes etapas:

1. Reflexão para encontrar o construtor: MVVMcross usa a reflexão para identificar o construtor da classe sendo instanciado.
2. Resolução de parâmetros: examina os parâmetros exigidos pelo construtor e identifica as interfaces ou tipos necessários.
3. Resolva implementações registradas: para cada parâmetro, o mvvmcross usa `mvx.iocprovider.resolve ()` para obter a implementação registrada para a interface ou tipo.
4. Invoke Construtor: Depois que todos os parâmetros forem resolvidos, o MVVMcross usa a reflexão para invocar o construtor com os parâmetros resolvidos.

Esse processo é recursivo, ou seja, se algum dos objetos resolvidos também exigir outros objetos, o MVVMCROSS também os resolverá [1] [4].

Registro em massa por convenção

O MVVMcross também suporta o registro em massa de classes usando a reflexão. Isso normalmente é feito na classe `app`, que herda do` mvxApplication`. A estrutura usa a reflexão para encontrar todas as classes na montagem do núcleo que terminam com "serviço" e as registra como singletons preguiçosos. Isso é alcançado através das seguintes etapas:

1. Encontre as classes que terminam com "serviço": a reflexão é usada para encontrar todas as classes com nomes terminando no "serviço" dentro da montagem do núcleo.
2. Identificar interfaces: para cada classe encontrada, o MVVMcross identifica as interfaces que implementa.
3. Registre -se como singletons preguiçosos: essas classes são registradas como singletons preguiçosos contra suas respectivas interfaces. Isso significa que eles não são instanciados até serem solicitados pela primeira vez [2] [4] [7].

ViewModels e injeção de dependência

O MVVMcross usa o mesmo mecanismo de injeção de construtor para viewmodels. Ao criar um ViewModel, o MVVMCROSS resolve qualquer dependência especificada no construtor usando o contêiner do IOC. Isso permite fácil personalização de serviços em diferentes plataformas e facilita o teste de unidade, permitindo o uso de implementações simuladas [1] [4].

personalização e appstart

A classe `App` é responsável por registrar objetos personalizados no contêiner do IOC e iniciar o ViewModels do aplicativo. Se necessário, você pode personalizar o processo de inicialização usando uma classe `AppStart` personalizada para decidir qual ViewModel apresentar primeiro [2] [7].

Em resumo, o MVVMCROSS aproveita a reflexão para automatizar o processo de resolução de dependências durante a construção de objetos, facilitando o gerenciamento de gráficos de objetos complexos e suportam o desenvolvimento entre plataformas com código mínimo específico da plataforma.

Citações:
[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-core-project/adding-an-app-pls
[3] http://woJosoftware.com/software/mvvmcross/
[4] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross-platform
[6] https://github.com/media-tools/sqlite-net-extensions
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup