web-dev-qa-db-fra.com

Lire appsettings.json à partir d'une classe dans .NET Core 2

J'ai besoin de lire une liste de propriétés de appsettings.json fichier (section: placeto) dans une classe affaires, mais je n'ai pas pu y accéder. J'ai besoin que ces propriétés soient publiques.

J'ajoute le fichier dans la classe Program:

Class program

C'est mon appsettings.json:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "placeto": {
    "login": "fsdfsdfsfddfdfdfdf",
    "trankey": "sdfsdfsdfsdfsdf"
  }
}
13
Jhon Diaz

First: Utilisez la valeur par défaut dans program.cs car il ajoute déjà la configuration:

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

Second: Créez une interface pour votre classe et passez la configuration avec l'injection de dépendances en créant le champ Iconfiguration:

private readonly IConfiguration Configuration;

puis passez-le par le constructeur:

public Test(IConfiguration configuration)
{
    Configuration = configuration;
}

Créez ensuite une interface pour votre classe afin d'utiliser Dependency Injection correctement. Ensuite, on peut en créer des instances sans avoir à lui passer IConfiguration.

Voici la classe et l'interface:

using Microsoft.Extensions.Configuration;

namespace GetUserIdAsyncNullExample
{
    public interface ITest { void Method(); }

    public class Test : ITest
    {
        public Test(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        private readonly IConfiguration Configuration;
        public void Method()
        {
            string here = Configuration["placeto:login"];
        }
    }
}

Third: Ensuite, dans votre startup.cs implémentez l'injection de dépendance pour votre classe en appelant:

services.AddSingleton< ITest, Test>();

dans votre méthode ConfigureServices

Vous pouvez désormais passer vos instances de classe à n'importe quelle classe utilisée par Dependency Injection.


Par exemple, si vous avez ExampleController dans lequel vous souhaitez utiliser votre classe, procédez comme suit:

 private readonly ITest _test;

 public ExampleController(ITest test) 
 {
     _test = test;          
 } 

Et maintenant, vous avez une instance de _test pour y accéder n'importe où dans votre contrôleur.

15
Mohamad Elnaqeeb