首页 > 解决方案 > 如何检索注入 IConfigurationBuilder 的命令行参数?

问题描述

我想通过 NuGet 包将args(类型string[])传递给我的IConfigurationBuilder可用Microsoft.Extensions.Hosting,然后稍后检索它。我注意到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. 我怎样才能将这些依赖注入argsSomeHostedService.
  2. 如果我想明确获得对它们的访问权限,我该如何检索它们?他们是否依附于IServiceCollection某个地方?

编辑: 的构造函数SomeHostedService应该接受string[]对应于args传递到应用程序中的一个。

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);

标签: c#dependency-injectionconfigurationcommand-line-arguments

解决方案


推荐阅读