Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Existem problemas conhecidos com o uso de Microsoft.Extensions.DependEncyInjection com mvvmcross


Existem problemas conhecidos com o uso de Microsoft.Extensions.DependEncyInjection com mvvmcross


Usando Microsoft.Extensions.DependencyInjecty com MVVMcross pode apresentar vários desafios e problemas conhecidos:

1. Incompatibilidade com o processo de inicialização do MVVMCROSS: MVVMCROSS requer a capacidade de resolver os componentes no meio do processo de configuração e, em seguida, continue registrando mais componentes. No entanto, Microsoft.Extensions.DependencyInjection (MS.DI) exige que todos os componentes sejam registrados antes de ligar para `.build ()` na coleção de serviços. Essa diferença fundamental torna os dois sistemas incompatíveis sem soluções alternativas adicionais, como traduzir manualmente os serviços de um contêiner para outro [1].

2. Processo de inicialização de dois estágios: Para aproveitar o MS.DI com o MVVMCROSS, os desenvolvedores costumam criar uma coleção de serviços MS.DI e depois traduzir seus serviços na instância MVVMcross `imvxiocprovider`. Essa abordagem introduz um processo de inicialização de dois estágios, que pode ser complicado e pode levar a complexidade adicional e possíveis problemas [1].

3. Limitações de injeção de dependência: o contêiner do IOC da MVVMcross trata o aspecto singleton no nível da interface, não no tipo instanciado. Isso significa que, se uma classe implementar várias interfaces, o MVVMcross poderá criar instâncias separadas para cada interface, a menos que seja gerenciado explicitamente [4]. Embora isso não esteja diretamente relacionado ao MS.DI, destaca a necessidade de gerenciamento cuidadoso ao integrar diferentes sistemas de injeção de dependência.

4. Problemas de atualização e compatibilidade: Atualizar as versões MVVMCROSS às vezes pode introduzir problemas com injeção de dependência, especialmente ao usar modelos de visualização de base. Por exemplo, alterações na lógica de seleção do construtor entre as versões podem afetar como as dependências são injetadas [2].

Para superar esses desafios, os desenvolvedores geralmente optam por aprimorar a funcionalidade da MVVMCROSS sem substituir seu contêiner principal do IOC. Isso permite o uso de estruturas adicionais de injeção de dependência como o MS.DI ao lado do MVVMCROSS, proporcionando flexibilidade na escolha do provedor do COI [1] [5]. No entanto, isso requer uma configuração e gerenciamento cuidadosas para evitar conflitos e garantir integração perfeita.

Em resumo, ao usar o Microsoft.Extensions.DependEncyInjection com MVVMcross é possível, requer uma consideração cuidadosa do processo de inicialização, potenciais incompatibilidades e gerenciamento cuidadoso de dependências para evitar problemas conhecidos.

Citações:
[1] https://github.com/mvvmcross/mvvmcross/issues/4436
[2] https://github.com/mvvmcross/mvvmcross/issues/4183
[3] https://docs.paricular.net/nservicebus/dependency-injection/extensions-dependencyinjection
[4] https://stackoverflow.com/questions/23700121/possible-bug-with-dependency-injection-on-mvvmcross
[5] https://github.com/mvvmcross/mvvmcross/issues/3804
[6] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[7] https://msicc.net/using-microsofts-extensions-dependencyinjection-package-in-xamarin-forms-mvvm-applications-part-2/
[8] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection