如何检索注入到 IConfigurationBuilder 中的命令行参数?



我想通过Microsoft.Extensions.HostingNuGet包将args(类型为string[])传递给我的IConfigurationBuilder,然后稍后检索它。我注意到IConfigurationBuilderAddCommandLine,但我不确定这些args最终在哪里,或者我如何访问它们。理想情况下,我希望将它们依赖项注入到我后来在ConfigureServices中定义的类的构造函数中,如下所示(SomeHostedService)。

例如,我有以下一段代码。

public static class HostBuilder
{
public static IHost BuildHostContext(string[] args) => 
Host.CreateDefaultBuilder(args).ConfigureHostConfiguration(c =>
{
c.AddCommandLine(args); // Where can I access args later on?
}).ConfigureServices((context, services) =>
{
// Add some services...
services.AddHostedService<SomeHostedService>(); 
// Would ideally like args dependency injected in SomeHostedService
}).Build();
}
  1. 我怎样才能依赖将这些args注入到SomeHostedService的构造函数中。
  2. 如果我想显式获取对它们的访问权限,如何检索它们?他们是否附着在某个地方的IServiceCollection上?

编辑SomeHostedService的构造函数应采用与传递到应用程序中args对应的string[]

public class SomeHostedService
{
public SomeHostedService(string[] files)
{
_files = files;
}
public void ReadFiles()
{
foreach (var file in _files)
DoSomething(file);
}

private void DoSomething(string filename)
{
// Do something...
}
private readonly string[] _files;
}

我的应用程序入口点如下所示 (C# 9):

using Microsoft.Extensions.DependencyInjection;
using System;
using var host = HostBuilder.BuildHostContext(args);
using var scope = host.Services.CreateScope();
await host.StartAsync().ConfigureAwait(false);

若要访问配置提供程序,请在构造函数中包含任何依赖项注入服务类的 IConfiguration。

public class MyClass:IMyClass{
private IConfiguration _configuration;
public MyClass(IConfiguration configuration){
_configuration=configuration;
}
}

若要将参数绑定到模型,请参阅这篇关于 Microsoft 学习:https://learn.microsoft.com/en-us/dotnet/standard/commandline/model-binding

相关内容

  • 没有找到相关文章