Maison >développement back-end >C++ >Comment puis-je enregistrer et résoudre plusieurs implémentations d'interface avec des clés uniques dans l'injection de dépendance au cœur ASP.NET?
enregistrer et analyser plusieurs interfaces dans ASP.NET Core pour implémenter
Lors de l'utilisation des mêmes services d'interface, ils peuvent être un défi basé sur l'enregistrement et l'analyse clés uniques. Contrairement à d'autres conteneurs IOC qui sont autorisés à distinguer l'implémentation spécifique, le système DI par défaut du noyau ASP.NET semble être limité à cet égard.
Solution: utilisez Func pour commander
Afin de surmonter cette limite, elle peut être réalisée en utilisant la commission de partage de type comme schéma variable-Pass.
ServiceResolver
Dans le fichier , utilisez le service transitoire et le mappage transitoires
<code class="language-csharp">public delegate IService ServiceResolver(string key);</code>
Startup.cs
Dans n'importe quelle classe injectée par DI, vous pouvez utiliser ServiceResolver
pour obtenir le service requis:
<code class="language-csharp">services.AddTransient<ServiceA>(); services.AddTransient<ServiceB>(); services.AddTransient<ServiceC>(); services.AddTransient<ServiceResolver>(serviceProvider => key => { switch (key) { case "A": return serviceProvider.GetService<ServiceA>(); case "B": return serviceProvider.GetService<ServiceB>(); case "C": return serviceProvider.GetService<ServiceC>(); default: throw new KeyNotFoundException(); } });</code>
Remarque: ServiceResolver
Cette méthode utilise la touche String pour simplifier l'objectif, mais si nécessaire, vous pouvez utiliser n'importe quel type d'analyse personnalisé comme clé.
<code class="language-csharp">public class Consumer { private readonly IService _aService; public Consumer(ServiceResolver serviceAccessor) { _aService = serviceAccessor("A"); } public void UseServiceA() { _aService.DoTheThing(); } }</code>Autres précautions
Bien que cette solution résout le problème des paris clés et de l'analyse de la mise en œuvre de l'interface multiple, il est nécessaire de prêter attention aux points suivants:
Cette solution implique une cartographie manuelle.
Il ne résout pas le problème de l'injection de données statiques dans le constructeur pendant la période d'inscription. Pour cette raison, envisagez d'utiliser le mode option ou d'autres technologies.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!