Pure.DI siguiente paso

Recientemente, en este post que se detalló el Pure.DI biblioteca . El paquete generador / analizador de código .NET 5 fue concebido como un ayudante que escribe código simple para componer objetos en estilo DI puro usando sugerencias para construir un gráfico de dependencia. Supervisa cambios, analiza tipos y dependencias entre ellos, resalta problemas y sugiere soluciones. Es importante tener en cuenta que la biblioteca Pure.DI no es un contenedor de inyección de dependencia, sus tareas incluyen:





  • análisis del gráfico de dependencia





  • Definición de problemas y formas de resolverlos.





  • creando código eficiente para la composición de objetos





De las discusiones en la publicación anterior, tuve la impresión de que es necesario abordar los siguientes problemas:





  • agregue la capacidad de usar Pure.DI en el marco ASP.NET





  • eliminar la dependencia binaria de la API del paquete Pure.DI.Contracts





  • aumentar el rendimiento para los casos en los que la operación Resolve()



    se realiza varias veces





Ahora, después de pequeñas mejoras, el analizador de código detecta automáticamente si un proyecto ASP.NET es un proyecto y genera un código de método de extensión personalizado que proporciona integración con ASP.NET . Para demostrar esta función, elegí una aplicación 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 . , , , “ - ”.





El marco ASP.NET llama a un método Resolve()



para cada solicitud. Para reducir la sobrecarga de esta llamada, se ha optimizado el código responsable de mapear el tipo de elemento raíz de una composición de objeto con el método de creación de esa composición. Los resultados de las pruebas comparativas se pueden encontrar aquí . Me gustaría enfatizar que esta comparación utiliza una forma controvertida de obtener métricas de desempeño. Por lo tanto, estos resultados dan una estimación aproximada de la sobrecarga de múltiples llamadas a métodos Resolve()



.





Como de costumbre, se agradece enormemente cualquier comentario e idea constructiva.








All Articles