web-dev-qa-db-fra.com

Existe-t-il un fichier de configuration universel pour la bibliothèque de classes .Net Standard 2.0?

J'ai une bibliothèque de classes que je convertis en bibliothèque de classes .Net Standard 2 afin de l'utiliser également dans les projets ASP.Net Core 2.0.

La bibliothèque a toujours lu à partir d'un fichier de configuration des éléments tels que les paramètres SMTP, les chaînes de connexion, etc.

Dans les projets Web, il trouve ces valeurs dans web.config.

Dans Console/WinForms, il trouve ces valeurs dans app.config.

Existe-t-il un fichier de configuration équivalent pour les projets .Net Core 2.0 qui "fonctionne" comme les exemples précédents?

Je suppose que la réponse est non, mais la recherche de la meilleure façon de gérer cela étant donné que la bibliothèque est utilisée dans toute l'organisation, il est donc important de maintenir la compatibilité descendante.

21
Brad Bamford

Il s'avère System.Configuration.ConfigurationManager a été ajouté à nouveau dans .NETStandard 2.0.

Tirez-le simplement depuis nuget et compilez le projet de bibliothèque de classes .NETStandard 2.0 .

Ensuite, la bibliothèque fonctionnera sur tous les projets à l'aide de fichiers de configuration standard:

  • Les projets Net Core 2.0 utilisent app.config
  • Les projets Web fonctionnent à partir de web.config
  • Console et Les applications Windows fonctionnent avec app.config
31
Brad Bamford

Approche de configuration révisée de .Net Core considérablement.

Vous n'appelez pas ConfigurationManager.AppSettings["someSetting"] plus chaque fois que vous avez besoin de valeur pour un paramètre. Au lieu de cela, vous chargez la configuration au démarrage de l'application avec ConfigurationBuilder. Il peut y avoir plusieurs sources de configuration (fichier de configuration json ou/et xml, variables d'environnement, ligne de commande, Azure Key Vault, ...).

Ensuite, vous créez votre configuration et passez des objets de configuration fortement typés enveloppés dans IOption<T> aux classes consommatrices.

Voici une idée de base de son fonctionnement:

//  Application boostrapping

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("AppSettings.json");
var configuration = configurationBuilder.Build();

//  IServiceCollection services

services.AddOptions();
services.Configure<SomeSettings>(configuration.GetSection("SomeSection"));

//  Strongly typed settings

public class SomeSettings
{
    public string SomeHost { get; set; }

    public int SomePort { get; set; }
}

//  Settings consumer

public class SomeClient : ISomeClient
{
    public SomeClient(IOptions<SomeSettings> someSettings)
    {
        var Host = someSettings.Value.SomeHost;
        var port = someSettings.Value.SomePort;
    }
}

//  AppSettings.json

{
  "SomeSection": {
    "SomeHost": "localhost",
    "SomePort": 25
  }
}

Pour plus de détails, consultez l'article Configurer une application ASP.NET Core .

J'ai peur qu'il soit difficile (en essayant d'éviter Word "impossible") de maintenir la compatibilité descendante.

7
CodeFuller