88 votes

Comment obtenir la valeur de appsettings.json

public class Bar
{
    public static readonly string Foo = ConfigurationManager.AppSettings["Foo"];
}

Dans l' .NET Framework 4.x, je peux utiliser l' ConfigurationManager.AppSettings ["Foo"] pour obtenir de l' Foo en Webconfig,et puis je peux facilement obtenir la valeur de Foo par Bar.Foo

Mais, dans .Net core, je mustto injecter options, Et ne peut pas obtenir la valeur de Foopar Bar.Foo

Est-il une méthode, qui peut être directement par le biais de l' Bar.Foo pour obtenir la valeur de Foo?

125voto

MindingData Points 331

Donc, il ya vraiment deux façons d'aller à ce sujet.

Option 1 : La Classe D'Options

Vous avez un appsettings.fichier json :

{
  "myConfiguration": {
    "myProperty": true 
  }
}

Vous créez une Configuration POCO comme suit :

public class MyConfiguration
{
    public bool MyProperty { get; set; }
}

Dans votre démarrage.cs vous avez quelque chose dans votre ConfigureServices qui enregistre la configuration :

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
}

Puis dans votre contrôleur/service que vous injectez dans le IOptions et c'est utilisable.

public class ValuesController : Controller
{
    private readonly MyConfiguration _myConfiguration;

    public ValuesController(IOptions<MyConfiguration> myConfiguration)
    {
        _myConfiguration = myConfiguration.Value;
    }
}

Personnellement je n'aime pas utiliser IOptions parce que je pense qu'il traîne le long de la partie supplémentaire de l'ordure que je ne veux pas vraiment, mais vous pouvez faire des choses très intéressantes comme la permutation à chaud, et des trucs avec elle.

Option 2 : Configuration de POCO

C'est essentiellement le même, mais dans votre Configurer les Services de la méthode, au contraire, vous lier à un singleton de votre POCO.

public void ConfigureServices(IServiceCollection services)
{
    //services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
    services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
}

Et puis, vous pouvez simplement injecter le POCO directement :

public class ValuesController : Controller
{
    private readonly MyConfiguration _myConfiguration;

    public ValuesController(MyConfiguration myConfiguration)
    {
        _myConfiguration = myConfiguration;
    }
}

Un peu simpliste, parce que vous devriez probablement utiliser une interface pour effectuer les tests unitaires un peu plus facile, mais vous obtenez l'idée.

Pour la plupart prises à partir d'ici : http://dotnetcoretutorials.com/2016/12/26/custom-configuration-sections-asp-net-core/

56voto

PinoyDev Points 28

Les solutions sur le dessus sont temps et n'est pas simple, c'est le meilleur moyen efficace de le faire, aucune configuration n'est nécessaire au démarrage ou quoi que ce soit. C'est comme utiliser le bon vieux Configuration.Le gestionnaire.AppSettings["configuration"]

D'abord créer une classe comme des "informations d'Identification":

public class Credential
  {
      public string Username {get;set}
      public string Password {get;set;}
  }

Maintenant que l'installation de laisser mettre la IConfiguration sur votre constructeur de la sorte:

    private IConfiguration _configuration;
    public ValuesController(IConfiguration iconfig)
    {
        _configuration = iconfig;
    }

Alors vous êtes prêt à l'appeler!

    Credential c = new Credential();
    c.UserName = _configuration.GetValue<string>("Credential:username");
    c.Password = _configuration.GetValue<string>("Credential:password");

En supposant que votre appsettings.json ressemble à ceci:

"Credential": {
    "username": "myuser",
    "password": "mypassword"
  }

Espérons que cela aide quelqu'un.

33voto

David Shinkle Points 101

Vous pouvez également utiliser directement la configuration. Vos paramètres sont injectés afin que vous puissiez les atteindre avec DI ...

 private readonly IConfiguration _configuration;

public MyClass(IConfiguration configuration)
{
    _configuration = configuration;
}
 

et alors vous pouvez lire vos paramètres ...

Dans ce cas, je récupère une collection ...

 var myList = _configuration.GetSection("MyList").Get<List<string>>();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X