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
:
C'est mon appsettings.json
:
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"placeto": {
"login": "fsdfsdfsfddfdfdfdf",
"trankey": "sdfsdfsdfsdfsdf"
}
}
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.