我想通过Microsoft.Extensions.Hosting
NuGet包将args
(类型为string[]
)传递给我的IConfigurationBuilder
,然后稍后检索它。我注意到IConfigurationBuilder
有AddCommandLine
,但我不确定这些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();
}
- 我怎样才能依赖将这些
args
注入到SomeHostedService
的构造函数中。 - 如果我想显式获取对它们的访问权限,如何检索它们?他们是否附着在某个地方的
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