.net Core Get Appsettings Value In Static Class

5 min read Jun 03, 2024
.net Core Get Appsettings Value In Static Class

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.

Featured Posts