35 votes

Configuration pour les applications de la console .net Core 2.0

Dans .net Core 1, nous pourrions faire ceci:

 IConfiguration config =  new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", true, true)
                .Build();
 

Et cela nous a permis d'utiliser l'objet Configuration que nous pourrions ensuite utiliser dans notre application console.

Tous les exemples de .net core 2.0 semblent être adaptés à la nouvelle manière de créer Asp.Net core config.

Quel est le moyen de créer des configurations pour les applications de la console?

Mise à jour: cette question n'est pas liée au noyau Asp.net. S'il vous plaît, n'ajoutez pas de balises asp.net lors de l'édition.

35voto

Il semble qu'il n'y ait pas de changement, comme dit Jehof.

ConfigurationBuilder est dans son propre package, comme le dit Jeroen Mostert.

Mais assurez-vous que vous disposez également du package Microsoft.Extensions.Configuration.Json, où réside l'extension .AddJsonFile ().

En résumé, vous avez besoin des deux packages NuGet suivants:

  • Microsoft.Extensions.Configuration (2.0.0)
  • Microsoft.Extensions.Configuration.Json (2.0.0)

10voto

Theyouthis Points 1522

Stocker private static IServiceProvider provider; dans votre Programme.cs. Ensuite, la configuration de l'Installation, comme vous le feriez dans aps.net core, mais bien sûr, vous le feriez dans main(). Puis Configurer chaque section à l'intérieur de votre IServiceProvider. De cette façon, vous pouvez utiliser le constructeur de l'injection de dépendances. Note aussi que j'ai deux configurations dans mon édulcorée exemple. L'un contient des secrets qui doivent être gardés hors de contrôle à la source et stockés à l'extérieur de la structure du projet, et j'ai AppSettings qui contient la configuration standard des réglages qui n'ont pas besoin d'être privé.(C'est important!)

Lorsque vous souhaitez utiliser la config, alors vous pouvez le sortir du fournisseur, ou de tirer un objet en dehors du fournisseur qui utilise vos paramètres de classes dans leurs constructeurs.

    private static IServiceProvider provider;
    private static EventReceiver receiver;
    static void Main(string[] args)
    {
        IConfigurationRoot config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile(path: "/opt/Secrets.json", optional: false, reloadOnChange: true)
            .AddJsonFile(path: "AppSettings.json", optional: false, reloadOnChange: true)
            .Build();
        provider = new ServiceCollection()
            .AddSingleton<CancellationTokenSource>()
            .Configure<Settings>(config.GetSection("SettingsSection"))
            .BuildServiceProvider();
        receiver = new EventReceiver<Poco>(ProcessPoco);
        provider.GetRequiredService<CancellationTokenSource>().Token.WaitHandle.WaitOne();
    }

    private static void ProcessPoco(Poco poco)
    {
        IOptionsSnapshot<Settings> settings = provider.GetRequiredService<IOptionsSnapshot<Settings>>();
        Console.WriteLine(settings.ToString());
     }

ce sont les dépendances, je vous recommande de commencer avec lors de la prise de dotnetcore cli app.

<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.0" />
<PackageReference Include="microsoft.extensions.logging.abstractions" Version="2.0.0" />

Notez également que vous devez copier vos paramètres de votre publication et les répertoires de construction. Vous pouvez le faire par l'ajout de cibles de votre fichier csproj.

  <Target Name="CopyToOut" BeforeTargets="BeforeBuild">
    <Copy SourceFiles="../ProjPath/AppSettings.json" DestinationFolder="$(TargetDir)" SkipUnchangedFiles="true" />
  </Target>
  <Target Name="CopyToOutOnPublish" AfterTargets="Publish">DestinationFolder="$(PublishDir)" SkipUnchangedFiles="true" />
    <Copy SourceFiles="../ProjPath/AppSettings.json" DestinationFolder="$(PublishDir)" SkipUnchangedFiles="true" />
  </Target>

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