Accéder aux valeurs d'AppSettings dans une classe statique avec .NET Core
Introduction
Lors du développement d'applications .NET Core, il est courant d'avoir besoin d'accéder à des valeurs de configuration stockées dans le fichier appsettings.json
. Cependant, accéder à ces valeurs à partir d'une classe statique peut poser un défi. Cet article explique comment résoudre ce problème de manière efficace et élégante.
Problématique
Les classes statiques sont initialisées une seule fois au démarrage de l'application, tandis que le contexte d'application et les configurations sont disponibles uniquement après l'initialisation de l'application. Par conséquent, accéder à appsettings.json
à partir d'une classe statique avant que le contexte d'application ne soit chargé entraînera une erreur.
Solution
Pour résoudre ce problème, nous allons utiliser une dépendance d'injection. Il s'agit d'un mécanisme puissant qui permet d'injecter des dépendances dans les classes, y compris les classes statiques.
1. Créer un service d'accès à la configuration
Tout d'abord, nous allons créer un service qui expose une méthode pour récupérer la valeur d'un paramètre de configuration à partir de appsettings.json
.
public class ConfigurationService
{
private readonly IConfiguration _configuration;
public ConfigurationService(IConfiguration configuration)
{
_configuration = configuration;
}
public string GetValue(string key)
{
return _configuration[key];
}
}
Ce service prend en entrée l'interface IConfiguration
qui représente la configuration de l'application. La méthode GetValue
permet de récupérer la valeur d'un paramètre donné à partir de appsettings.json
.
2. Enregistrer le service dans le conteneur de services
Dans le fichier Startup.cs
, nous devons enregistrer notre service ConfigurationService
dans le conteneur de services de l'application.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton();
// ...
}
3. Injecter le service dans la classe statique
Maintenant, nous pouvons injecter notre service ConfigurationService
dans notre classe statique en utilisant le constructeur statique.
public static class MyStaticClass
{
private static readonly IConfigurationService _configurationService;
static MyStaticClass()
{
// Récupérer l'instance du conteneur de services
var serviceProvider = new ServiceCollection()
.AddSingleton()
.BuildServiceProvider();
// Injecter le service
_configurationService = serviceProvider.GetService();
}
public static string GetSetting(string key)
{
// Utiliser le service pour récupérer la valeur
return _configurationService.GetValue(key);
}
}
Important: Il est crucial d'utiliser IServiceProvider
pour obtenir une instance du service ConfigurationService
à partir du conteneur de services. Ne pas le faire entraînera une erreur.
4. Utiliser la valeur dans la classe statique
Maintenant, nous pouvons accéder à la valeur de la configuration dans notre classe statique en utilisant la méthode GetSetting
.
// ...
public static void DoSomething()
{
var mySetting = MyStaticClass.GetSetting("MySetting");
Console.WriteLine($"Valeur de MySetting: {mySetting}");
}
Conclusion
En utilisant l'injection de dépendance, nous avons réussi à accéder aux valeurs d'AppSettings dans une classe statique avec .NET Core. Cette approche est simple, flexible et permet de maintenir un code propre et bien organisé. N'hésitez pas à adapter cet exemple à vos propres besoins et à l'intégrer dans vos projets .NET Core.