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

时间:2017-06-29 02:37:46

标签: c# .net asp.net-core

我想通过命令行参数将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();
    }

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

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

My 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();
    }

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

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

1 个答案:

答案 0 :(得分:0)

我不见了

.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();
    }`