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>