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>();
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.