SteelToe 无法从配置服务器访问数据

SteelToe not able to access data from config server

我已按照 SteelToe 文档从我的配置服务器访问配置数据。 https://steeltoe.io/docs/steeltoe-configuration/#2-2-5-access-configuration-data

在我的 TestController 中,我在构造函数中设置了配置全局变量。但是,当我检查变量 _config 时,它基本上没有值 null 值。

我不确定是否需要将值物理映射到 CustomConfig class 属性?因为文档中没有指定。

Startup.cs

public class CustomConfig { 
     public string Message { get; set; } 
}

public Startup(IConfiguration configuration, IHostingEnvironment env)
{

     var builder = new ConfigurationBuilder()
          .SetBasePath(env.ContentRootPath)
          .AddConfiguration(configuration)
          .AddCloudFoundry()
          .AddEnvironmentVariables();

     this.Configuration = builder.Build();
}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
     services.Configure<CustomConfig>(Configuration.GetSection("spring:cloud:config:uri"));
}

Program.cs

public class Program
{
   public static void Main(string[] args)
   {
        CreateWebHostBuilder(args)
            .Build()
            .Run();
   }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .AddConfigServer()
            .UseStartup<Startup>();
    }
}

Controller.cs

public class TestController : ControllerBase
{
     private Startup.CustomConfig _config;     
     public TestController(IOptions<Startup.CustomConfig> configSettings)
     {
          _config = configSettings.value; // this is null
     }
}

看来解决我的问题的唯一方法如下:

CustomConfig class 扩展为具有构造函数,在该构造函数中,我从配置服务器

获取 uri 的值
public class CustomConfig
{
    public string uri { get; set; }

    public CustomConfig(IConfiguration configuration)
    {
        uri = configuration.GetValue<string>("spring:cloud:config:uri");
    }
}

然后在我的控制器中,我在构造函数中调用 class,如下所示:

private Startup.CustomConfig _customConfig;

public TestController(Startup.CustomConfig customConfig)
{
    _customConfig = customConfig;
}

当我检查 _customConfig 变量时,它包含我的 uri 值。

我不会将此标记为答案,会等待其他人的建议。

这里发生的几件事妨碍了您:

  1. 不要在 Startup 中构建配置,应该在 program.cs
  2. 中处理
  3. 属性 将配置绑定到自定义时名称需要匹配 类
  4. 应在 Configure
  5. 中配置选项