Plusieurs services pour implémenter plusieurs services dans ASP.NET Core
Dans ASP.NET Core, plusieurs services rencontrent souvent la même interface. Afin de gérer efficacement cette situation, nous devons comprendre comment enregistrer ces services et comment utiliser l'identifiant de distinction pour les résoudre pendant l'exécution.
Enregistrement des services
Dans ASP.NET Core, vous pouvez enregistrer le service dans la méthode de la classe de démarrage. Habituellement, nous avons enregistré des services comme celui-ci:
ConfigureServices
Cependant, cette méthode ne peut pas distinguer les différents services, ce qui limite notre capacité à les analyser à l'avenir.
services.AddTransient<IService, ServiceA>();
services.AddTransient<IService, ServiceB>();
Copier après la connexion
<> Utilisez la clé pour analyser
Pour résoudre le service en fonction de la clé, nous avons besoin d'un mécanisme pour cartographier la clé de l'implémentation du service. Cela peut être mis en œuvre à l'aide de la Commission:
Nous pouvons enregistrer cette commission en tant que service transitoire et le cartographier à la mise en œuvre du service:
public delegate IService ServiceResolver(string key);
Copier après la connexion
<> Injection dépendante dans le constructeur
services.AddTransient<ServiceResolver>(serviceProvider => key =>
{
switch (key)
{
case "A":
return serviceProvider.GetService<ServiceA>();
case "B":
return serviceProvider.GetService<ServiceB>();
default:
throw new KeyNotFoundException();
}
});
Copier après la connexion
Bien que la méthode ci-dessus soit valide, elle nous empêche d'injection de données statiques dans le constructeur pendant la période d'inscription. Afin de surmonter cette limite, nous pouvons utiliser le mode , qui fournit une méthode d'injection de paramètres:
Ensuite, nous pouvons accéder à ces options dans le constructeur de services:
IOptions
<论> Conclusion services.Configure<ServiceAOptions>(options =>
{
options.ConnectionString = "connectionStringA";
});
Copier après la connexion
En utilisant le mode Commission et public ServiceA(IOptions<ServiceAOptions> options)
{
_connectionString = options.Value.ConnectionString;
}
Copier après la connexion
, nous pouvons enregistrer et analyser efficacement plusieurs services dans ASP.NET Core, et en même temps, nous pouvons également injecter l'injection de constructeur pour des données statiques. Cette méthode fournit une solution flexible et maintenable pour les éléments de dépendance complexes. 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!