微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – .NET核心Web项目 – 使用命令行参数

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

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

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

我的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进行构造函数注入,但这些都没有注册.

解决方法

我失踪了

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐