我想通过命令行参数将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进行构造函数注入,但这些都没有注册。
答案 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();
}`