.NET Core Web项目 - 使用命令行参数

6
我希望能够通过命令行参数将DbConnectionString传递给我的.NET Core Web API应用程序。

阅读后:

.NET core Pass Commandline Args to Startup.cs from Program.cs

我的Program.cs大致如下:

        public static void Main(string[] args) {

        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .Build();
        var host = new WebHostBuilder() 
            .UseKestrel()
            .UseConfiguration(config)
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }

现在...我已经将命令行参数添加到我的WebHostBuilder的键值对配置集合中...

然而,在Startup.cs文件中,我需要注册所有内容,如我的DbContext(它需要作为命令行参数传递的DbConnectionString)

我的Startup构造函数如下所示:

        public Startup(IHostingEnvironment env) {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

因为之前,我的连接字符串存储在一个配置文件中。

我的问题是 - 如何从Startup.cs中访问命令行参数?? 我尝试了使用IConfiguration和IConfigurationRoot进行构造函数注入,但是它们都没有注册。

1个回答

1

我失踪了

.ConfigureServices(s => s.AddSingleton<IConfigurationRoot>(config))

在我的 program.cs 文件中,修复后的版本如下:
public static void Main(string[] args) {
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .Build();
        var host = new WebHostBuilder() 
            .UseKestrel()
            .UseConfiguration(config)
            .ConfigureServices(s => s.AddSingleton<IConfigurationRoot>(config))
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }`

你如何准确地传递参数?我正在寻找类似的实现方式,我的需求是将配置绑定到一个模型类。特定的参数/属性可以来自appsettings.json(如果我传递它就可以工作),也可以来自命令行(但我不知道正确的语法来传递它,以便绑定到我的属性)。 - Ak777
// 配置配置项 services.Configure<AppConfigurations>(config => Configuration.Bind(config)); - Ak777

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接