加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:07:14 所属栏目:百科 来源:网络整理
导读:我想通过命令行参数将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 Configur
我想通过命令行参数将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();
    }`

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读