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.
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:
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.