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

And*_*yNZ 5 .net c# asp.net-core

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

看完后:

.NET core 将命令行参数从 Program.cs 传递到 Startup.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();
    }
Run Code Online (Sandbox Code Playgroud)

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

但是,在 Startup.cs 中,我注册了所有内容,例如 DbContext(需要将 DbConnectionString 作为命令行参数传递)

我的启动构造函数如下所示:

        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();
    }
Run Code Online (Sandbox Code Playgroud)

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

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

And*_*yNZ 1

我失踪了

.ConfigureServices(s => s.AddSingleton<IConfigurationRoot>(config))
Run Code Online (Sandbox Code Playgroud)

在我的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();
    }`
Run Code Online (Sandbox Code Playgroud)