L'obtention de la valeur de appSettings.json?
Je ne suis pas en mesure de récupérer la valeur définie dans appsettings.json, lorsque j'exécute le code ci-dessous, j'obtiens une erreur System.NullReferenceException: 'Object reference not set to an instance of an object.'
Ce que je fais mal?
public static IConfigurationRoot Configuration { get; }
....
string facebookApiId = Configuration.GetValue<string>("Authentication:Facebook:AppId");
appSettings.json
"Authentication": {
"Facebook": {
"IsEnabled": "false",
"AppId": "somevalue1",
"AppSecret": "somevalue2"
},
"Google": {
"IsEnabled": "false",
"ClientId": "somevalue3",
"ClientSecret": "somevalue4"
}
De démarrage.cs
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
- Avez-vous jamais
Configuration
avec le résultat de la configuration du générateur? Post de votre Démarrage du constructeur - Vous ne pouvez pas céder vos
Configuration
des biens, ou de l'affecter plus tard que vous essayez d'obtenir la valeur. - posté le démarrage.cs
- Et où en êtes-vous y accéder à partir de? Depuis qu'il est statique, il peut être partout. La Configuration doit être accessible de l'extérieur de démarrage de toute façon (recommandé est privé ou protégé). Statique supporte le risque d'être appelé avant qu'il soit initialisé. Changer protégées et voir si vous obtenez des erreurs de compilation après que
- Vos exemples de code sont contradictoires. Dans un premier temps vous avez
static IConfigurationRoot Configuration
, en deuxièmeIConfigurationRoot Configuration
(non statique).
Vous devez vous connecter pour publier un commentaire.
Dans votre code vous avez réellement, 2 (deux)
Configuration
propriétés, l'une dansStartup
, ce qui est bon, que c'est d'être peuplée et stockées dans instance terrain et une de sans nom contrôleur, qui eststatic
et semble ne jamais être instancié.Selon Article MSDN sur la configuration, recommandé façon de fournir vos options pour les contrôleurs est de mettre en œuvre l'option de base et la configuration de la logique de l'objet, quelque chose comme ceci:
Maintenant, vous pouvez facilement obtenir les options de votre contrôleur via l'injection de dépendance:
Si vous avez besoin d'un ensemble de la configuration, vous pouvez ajouter un peu de classe générique contenant toutes les options et l'utilisation d'un objet graphique de la cartographie à partir du même article:
Edit: assurez-vous que vos classes et sections de configuration sont nommés aussi que c'est important, car s'est avéré.
Configuration.GetSection
?Google
à l'intérieur deStartup
? Il l'a fait lire correctement?