A substituição do contêiner IOC padrão no MVVMCROSS pode introduzir vários problemas comuns, principalmente devido à maneira como o MVVMCROSS se integra ao seu contêiner IOC integrado. Aqui estão alguns dos desafios que você pode encontrar:
1. Registro e sincronização de serviço **
Um dos principais problemas é garantir que todos os serviços necessários sejam registrados e que o `iserviceProvider` permaneça sincronizado com o` iserviceCollection`. O MVVMCROSS continua a registrar seus próprios serviços após a configuração inicial, o que pode levar a inconsistências se não for tratado corretamente. Isso requer a atualização do provedor em cada registro de coleção, que pode afetar o desempenho [1].2. Falta serviços MVVMcross **
O MVVMcross conta com vários serviços internos, como `imvxLoggerProvider`,` imvxsettings` e `imvxstart`, entre outros. Ao substituir o contêiner do COI, esses serviços podem não ser registrados automaticamente, levando a falhas de inicialização. Você precisa registrar manualmente esses serviços ou encontrar uma maneira de permitir que o MVVMCROSS lide com o registro do seu contêiner personalizado [1].3. Problemas de vida útil e retorno de chamada **
O MVVMcross usa retornos de chamada quando os serviços são registrados, o que pode ser complicado de lidar em um adaptador personalizado do COI. Além disso, o gerenciamento da vida útil (por exemplo, Singleton, Transiente) pode exigir implementação personalizada para corresponder às expectativas da MVVMCROSS [4].4. Integração com bibliotecas de terceiros **
O uso de um contêiner IOC diferente, como .NET Core, o DI permite uma integração mais fácil com bibliotecas de terceiros que fornecem métodos de extensão para registro (por exemplo, `ihttpClientFactory`,` polly`, `Automapping`). No entanto, garantir que essas bibliotecas funcionem perfeitamente com a configuração personalizada do MVVMCROSS pode ser um desafio [1].5. Considerações de desempenho **
Construir uma nova instância `iserviceProvider 'sempre que os serviços são registrados pode levar a problemas de desempenho. Isso ocorre porque `buildServiceProvider ()` é chamado repetidamente, o que pode ser caro em termos de recursos e tempo [1].6. Personalização e substituição **
Para substituir completamente o contêiner IOC padrão, você precisa substituir o método `CreateIocProvider` na sua classe de configuração. Isso requer a criação de um adaptador que mapeie sua implementação de IOC personalizada para a interface `imvxiocprovider` da MVVMcross. Esse processo pode ser complexo e requer manuseio cuidadoso dos requisitos específicos da MVVMcross [4].7. Considerações específicas da plataforma **
Ao trabalhar com plataformas como a Xamarin, considerações adicionais podem surgir devido aos processos específicos de configuração e inicialização desses ambientes. Por exemplo, garantindo que os serviços específicos do Android sejam devidamente registrados e resolvidos [10].Em resumo, a substituição do contêiner Padrão do COI no MVVMCROSS envolve abordar o registro de serviço, a sincronização, os serviços ausentes, o gerenciamento vitalício, a integração com bibliotecas de terceiros, otimização de desempenho e considerações específicas da plataforma. Cada uma dessas áreas requer manuseio cuidadoso para garantir uma transição suave e funcionalidade adequada do aplicativo.
Citações:[1] https://stackoverflow.com/questions/64478974/replace-default-ioc-container-in-mvvmcross
[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] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[4] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[5] https://learn.microsoft.com/en-us/archive/msdn-magazine/2013/febary/mvvm-ioc-containers-and-mvvm
[6] https://docs.spring.io/spring-framework/docs/4.3.9.release/spring-framework-reference/html/beans.html
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/tutorials/tipcalc/the-core-project
[9] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[10] https://stackoverflow.com/questions/53752857/xamarin-android-specific-ioc-in-mvvmcross-constructor-issue/53761392