Récemment , dans ce poste vous avez été présenté à la Pure.DI bibliothèque . Le package analyseur / générateur de code NET 5 a été conçu comme une aide qui écrit du code simple pour composer des objets dans un style DI pur en utilisant des indices pour créer un graphe de dépendances. Il surveille les changements, analyse les types et les dépendances entre eux, met en évidence les problèmes et suggère des solutions. Il est important de noter que la bibliothèque Pure.DI n'est pas un conteneur d'injection de dépendances, ses tâches incluent:
analyse de graphes de dépendance
définition des problèmes et moyens de les résoudre
création de code efficace pour la composition d'objets
D'après les discussions dans le post précédent, j'ai eu l'impression que les problèmes suivants doivent être résolus:
ajouter la possibilité d'utiliser Pure.DI dans le framework ASP.NET
supprimer la dépendance binaire sur l'API du package Pure.DI.Contracts
augmenter les performances pour les cas où l'opération
Resolve()
est effectuée plusieurs fois
Désormais, après des améliorations mineures, l'analyseur de code détecte automatiquement si un projet ASP.NET est un projet et génère un code de méthode d'extension personnalisé qui fournit l'intégration avec ASP.NET . Pour démontrer cette fonctionnalité, j'ai choisi une application serveur 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 . , , , “ - ”.
Le framework ASP.NET appelle une méthode Resolve()
pour chaque demande. Pour réduire la surcharge de cet appel, le code chargé de mapper le type d'élément racine d'une composition d'objet à la méthode de création de cette composition a été optimisé. Les résultats des tests comparatifs peuvent être trouvés ici . Je tiens à souligner que cette comparaison utilise une méthode controversée pour obtenir des mesures de performance. Par conséquent, ces résultats donnent une estimation approximative de la surcharge de plusieurs appels de méthode Resolve()
.
Comme d'habitude, tous les commentaires et idées constructifs sont grandement appréciés.