web-dev-qa-db-fra.com

Impossible d'obtenir la section de configuration après la mise à jour vers ASP.NET Core 2

J'ai mis à jour mon projet de 1.0.0-rc1-final à 1.0.0-rc2-final, qui s'appelle maintenant ASP.NET Core 2. Voici comment j'initialise le constructeur de configuration:

var builder = new ConfigurationBuilder().SetBasePath(Environment.GetEnvironmentVariable("ASPNETCORE_CONTENTROOT")).AddJsonFile(file).AddEnvironmentVariables();
IConfiguration configuration = builder.Build();

Je sais pour sûr que l'initialisation est ok parce que je peux faire 

configuration.AsEnumerable()

dans le débogueur et voir toutes les valeurs dans les fichiers de configuration.

Cependant, si j'essaie d'obtenir une section de configuration complète comme celle-ci

configuration.GetSection(section.Name);

ça ne marche pas. Il retourne un objet, peu importe ce que je passe à GetSection. Cependant, le champ Value de cet objet est toujours nul, que la section existe ou non.

Notez que cela fonctionnait parfaitement avant. Des indices?

12
Alex G.

Il s'avère qu'on ne peut plus faire quelque chose comme:

var allSettingsInSection = configuration.Get(typeof(StronglyTypedConfigSection), sectionName);

Au lieu de cela, cela doit être fait comme ceci maintenant:

IConfigurationSection sectionData = configuration.GetSection(sectionName);
var section = new StronglyTypedConfigSection();
sectionData.Bind(section);

Notez qu'il est nécessaire d'inclure Microsoft.Extensions.Configuration.Binder in project.json .

14
Alex G.

Juste une version plus propre de la réponse acceptée:

public void ConfigureServices(IServiceCollection services)  
{
    services.Configure<MySettings>(options => Configuration.GetSection("MySettings").Bind(options));
}

La source

8
user1265146

Dans dot net core 2.1, vous pouvez faire ceci:

var MyConfigClass = Configuration.GetSection("MyConfigClass").Get<MyConfigClass>();
1
BartKrul

J'utilise l'allocation GetSection et j'ai donc créé une méthode d'extension pour m'aider à obtenir des sections à l'aide de génériques

public static class ConfigurationExtensions
{
    public static T GetConfig<T>(this IConfiguration config) where T : new()
    {
        var settings = new T();
        config.Bind(settings);
        return settings;
    }

    public static T GetConfig<T>(this IConfiguration config, string section) where T : new()
    {
        var settings = new T();
        config.GetSection(section).Bind(settings);
        return settings;
    }
}
0
Menelaos Vergis