Passo seguinte do Pure.DI

Recentemente em este post você foi apresentado à Pure.DI biblioteca . O pacote analisador / gerador de código NET 5 foi concebido como um auxiliar que escreve código simples para compor objetos no estilo DI puro usando dicas para construir um gráfico de dependência. Ele monitora mudanças, analisa tipos e dependências entre eles, destaca problemas e sugere soluções. É importante observar que a biblioteca Pure.DI não é um contêiner de injeção de dependência, suas tarefas incluem:





  • análise de gráfico de dependência





  • definição de problemas e formas de resolvê-los





  • criação de código eficiente para composição de objetos





A partir das discussões na postagem anterior, tive a impressão de que os seguintes problemas precisam ser resolvidos:





  • adicionar a capacidade de usar Pure.DI na estrutura ASP.NET





  • remova a dependência binária da API do pacote Pure.DI.Contracts





  • aumentar o desempenho para casos em que a operação Resolve()



    é realizada várias vezes





Agora, após pequenas melhorias, o analisador de código detecta automaticamente se um projeto ASP.NET é um projeto e gera um código de método de extensão personalizado que fornece integração com ASP.NET . Para demonstrar esse recurso, escolhi um aplicativo de servidor Blazor :





:





DI.Setup()
  .Bind<IDispatcher>().As(Singleton).To<Dispatcher>()
  .Bind<IClockViewModel>().To<ClockViewModel>()
  .Bind<ITimer>().As(Scoped).To(_ => new Timer(TimeSpan.FromSeconds(1)))
  .Bind<IClock>().As(ContainerSingleton).To<SystemClock>();
      
      



DI   ASP.NET :





services.AddClockDomain();
      
      



, -, . , :





  • ContainerSingleton - ASP.NET





  • Scoped - ASP.NET scope





ASP.NET, .





API “” Pure.DI.Contracts. API “ ” , API . , , analyzers Pure.DI . , , , “ - ”.





A estrutura ASP.NET chama um método Resolve()



para cada solicitação. Para reduzir a sobrecarga dessa chamada, o código responsável por mapear o tipo de elemento raiz de uma composição de objeto para o método de criação dessa composição foi otimizado. Os resultados dos testes comparativos podem ser encontrados aqui . Gostaria de enfatizar que esta comparação usa uma forma controversa de obter métricas de desempenho. Portanto, esses resultados fornecem uma estimativa aproximada da sobrecarga de várias chamadas de método Resolve()



.





Como de costume, quaisquer comentários e ideias construtivos são muito apreciados.








All Articles