SteelToe не может получить доступ к данным с сервера конфигурации - PullRequest
0 голосов
/ 08 июля 2019

Я следую документации SteelToe для доступа к данным конфигурации с моего сервера конфигурации. https://steeltoe.io/docs/steeltoe-configuration/#2-2-5-access-configuration-data

Внутри моего TestController я настраиваю глобальную переменную конфигурации в конструкторе. Однако, когда я проверяю переменную _config, она не имеет значения в основном null.

Я не уверен, нужно ли мне физически сопоставлять значения со свойствами класса CustomConfig? Так как это не указано в документации.

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
     }
}

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Здесь происходит несколько вещей, которые вам мешают:

  1. Не создавать конфигурацию внутри автозагрузки, это должно быть обработано в program.cs
  2. Имена свойств должнысовпадать при связывании конфигурации с пользовательскими классами
  3. Параметры должны быть настроены в Configure
0 голосов
/ 09 июля 2019

Что ж, похоже, единственный способ решить мою проблему заключается в следующем:

Класс CustomConfig расширен, чтобы иметь конструктор, и внутри этого конструктора я получаю значение uri с сервера конфигурации.

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

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

И затем внутри моего контроллера я вызываю класс в конструкторе следующим образом:

private Startup.CustomConfig _customConfig;

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

Когда я проверяю переменную _customConfig, она состоит из моего значения uri.

Я не отмечу это как Ответ и буду ждать предложений от других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...