Url 未从 appsettings.json 读取

Url is not being read from appsettings.json

如果我提出任何愚蠢的问题,请提前致歉,因为这对我来说都是全新的,但我基本上需要将 cs 文件中的几个硬编码 URL 存储到 json 文件.

这不是一个网络项目,这个项目运行是一系列通过 NUNit 的 selenium 自动化测试它是一个 .NETCore 应用程序

所以我的 appsettings.json 看起来像:

{
  "Development": {
    "urlName": "https://dev.website.com"
  }
}

我的 Program.cs 文件看起来像

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;


namespace Automation
{
    class Program
    {
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                config.AddEnvironmentVariables();
                config.AddCommandLine(args);               
            });
        
    }
}

我基本上是在我的启动“BaseTest”class 中创建一个构造函数,这是在执行测试本身之前首先获取 运行 的 class,构造函数如下:

  protected IConfiguration _config;

        public BaseTest()
        {
             _config = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .Build();
            baseUrl = _config["urlName"];
        }

想法是,一旦 BaseTest class 中的这一行是 运行,它就会从 json 文件

中提取 URL
driver.Navigate().GoToUrl(baseUrl);

但它返回为 null,我知道我遗漏了一些东西,但我不知道是什么,或者如果我的方向正确,请帮助。

appsettings.json 文件也设置为始终复制

urlName 在一个名为 Development

的 property/section 中
var baseUrl = _config.GetSection("Development")["urlName"]

注意 :还有许多其他方法可以以类型化的方式执行此操作,将其插入.net core,将其更多地集成简洁地使用 DI 并可选择使用 IOptions,但这与您所拥有的一致


如果你安装了 Microsoft.Extensions.Configuration.Binder nuget,你也可以想象做这样的事情

public class Development
{
   public Uri UrlName { get; set; }
}

...

var myConfig = _config.GetSection(nameof(Development)).Get<Development>();

如果您想使用选项模式 one of many 方法,请添加 Microsoft.Extensions.Options.ConfigurationExtensions nuget 并执行以下操作

services.Configure<Development>(_config.GetSection(nameof(Development)));