CHERRYPICK – Uma estrutura DI leve e modular para dardos e vibração que resolve a injeção de dependência através de fortes digitação, geração de código e controle de dependência. A versão 3.x foi lançada recentemente com melhorias significativas. Principais alterações na resolução de dependência 3.x O (1) – graças à indexação do mapa de ligações, o desempenho não depende do tamanho do escopo no gráfico de diário. Isso fornece aceleração notável em grandes projetos. Proteção contra dependências circulares – A verificação funciona tanto dentro de um único escopo quanto em toda a hierarquia. Quando um ciclo é detectado, uma exceção informativa com a cadeia de dependência é lançada. Integração com Talker – Todos os eventos de DI (registro, criação, exclusão, erros) são registrados e podem ser exibidos no console ou na interface do usuário. Limpeza automática de recursos – Os objetos que implementam descartáveis são liberados corretamente quando o escopo estiver fechado. Suporte de abordagem declarativa estabilizada – anotações e geração de código agora funcionam de maneira mais confiável e são mais convenientes para uso em projetos. Exemplo de limpeza de recursos Classe MyServiceWithSocket implementa descartáveis {@Override Future descarte () assíncrono {aguardar soket.close (); impressão (‘soquete fechado!’); }} classe AppModule estende o módulo {@Override void Builder (Scope CurrentsCope) {// Singleton API Bind() .toprovide (() => myServiceWithSocket ()) .Singleton (); }} scope.installmodules ([AppModule()]); aguarda cherrypick.closerootscope (); // aguardará a disposição do Async para concluir o Modo Full-Screen Modo de tela cheia de tela cheia de dependência circular, verificando um dos novos recursos do CherryPick 3.x é a proteção do ciclo interno. Isso ajuda a capturar situações cedo, onde os serviços começam dependendo um do outro recursivamente. Como ativar a verificação para verificar em um único escopo: escopo final = cherrypick.openrootscope (); scope.enablecycycledEtection (); Digite o modo de saída do modo de tela cheia para verificação global em toda a hierarquia: Cherrypick.enableglobalcycleteCetection (); Cherrypick.enableGlobalCrossScopeCycleteCelection (); Final Rootscope = Cherrypick.openrootsCope (); Digite o modo de saída do modo de tela cheia como um ciclo pode ocorrer, suponha que tenhamos dois serviços que dependem um do outro: classe UserService {final OrderService OrderService; UserService (this.orderService); } classe Ordeservice {Final UserService UserService; OrderService (this.UserService); } Digite o modo de saída do modo de tela cheia se registrarmos no mesmo escopo: classe appmodule estende o módulo {@Override void Builder (Scope CurrentScope) {Bind() .Toprovide (() => UserService (scope.resolve ())); vincular() .TOProvide (() => OrderService (Scope.Resolve ())); }} Escopo final = cherrypick.openrootscope () ..enableCycleteTection () ..InstallModules ([AppModule()]); Scope.Resolve(); Digite o modo de saída da tela cheia de tela cheia e, ao tentar resolver a dependência, uma exceção será lançada: ❌ Dependência circular detectada para a cadeia de dependência de serviço de usuários: Usuários Service -> OrderService -> UserService Digite o modo de tela cheia de saída de tela cheia dessa maneira, o erro é detectado imediatamente, não “em algum lugar no tempo de execução”. A integração com o Talker Cherrypick 3.x permite registrar todos os eventos de DI através do Talker: Registro, criação de objetos, exclusão e erros. Isso é conveniente para depurar e diagnosticar o gráfico de dependência. Exemplo de conexão: Final Talker = Talker (); Final Observer = TalkerCerrypickobServer (Talker); Cherrypick.setglobalobserver (Observer); Digite o modo de saída do modo de tela cheia depois disso, os eventos de DI serão exibidos no console ou na interface do usuário: ┌───────────rig por causa [info] 9:41:33 | [scope opened][CherryPick] SCOPE_1757054493089_7072 └──── far uma ┌───rigpante – – – – – – deixou -as – – Mu [verbose] 9:41:33 | [diagnostic][CherryPick] Escopo Criado: SCOPE_1757054493089_7072 {TYPE: SCOPE, NOME: SCOPE_1757054493089_7072, Descrição: Escopo criado} └───── fareu -as –─── far uma das músicas retais e que o modo de descrição e o objetivo é o que você pode fazer com que o modo de realização de produtos full e oscilados, o que se reexecione. Abordagem declarativa com anotações Além das descrições de módulos totalmente programáticas, o CherryPick suporta o estilo DI declarativo por meio de anotações. Isso permite minimizar o código manual e gerar automaticamente módulos e mixins para injeção automática de dependência. Exemplo de um módulo declarativo: @module () class. @provide () repo repo (API API) => repo (API); } Digite o modo de saída do modo de tela completa após a geração de código, você pode injetar automaticamente dependências em widgets ou serviços: @injectable () myscreen estende o estágio de improviso com _ $ myScreen {@Inject () tardio de repo final Repo; MyScreen () {_inject (this); }} Digite o modo de saída de tela cheia de tela cheia dessa maneira, você pode escolher uma abordagem no desenvolvimento: programática (imperativa) com registro explícito de dependência ou declarativo por meio de anotações. Quem pode achar o Cherrypick útil? Projetos em que é importante garantir que não há ciclos no gráfico de dependência; As equipes que desejam minimizar o código DI manual e usar um estilo declarativo com anotações; Aplicativos que requerem limpeza automática de recursos (soquetes, controladores, fluxos). Links úteis
Fonte