web-dev-qa-db-fra.com

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 façon 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. N'ajoutez pas de balises principales asp.net lors de l'édition.

31
zaitsman

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

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

Assurez-vous toutefois 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)
34

Stocker un private static IServiceProvider provider; dans vos Program.cs. Ensuite, configurez la configuration comme vous le feriez dans aps.net core, mais vous le feriez bien entendu dans Main (). Ensuite, configurez chaque section dans votre IServiceProvider. De cette façon, vous pouvez utiliser l'injection de dépendance du constructeur. Notez également que j'ai deux configurations dans mon exemple dilué. L'un contient des secrets qui doivent être conservés hors du contrôle des sources et stockés en dehors de la structure du projet, et j'ai AppSettings qui contient les paramètres de configuration standard qui n'ont pas besoin d'être gardés confidentiels (c'est important!).

Lorsque vous souhaitez utiliser la configuration, vous pouvez la retirer du fournisseur ou extraire un objet du fournisseur qui utilise vos classes de paramètres 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 avec lesquelles je recommande de commencer lors de la création d'une application dotnetcore cli.

<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 devrez copier vos paramètres dans vos répertoires de publication et de construction. Vous pouvez le faire en ajoutant des cibles à 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>
10
Theyouthis