SteelToe не может получить доступ к данным с сервера конфигурации
Я следую за SteelToe
документация для доступа к данным конфигурации с моего сервера конфигурации. https://steeltoe.io/docs/steeltoe-configuration/
Внутри моего 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 ответа
Здесь происходит несколько вещей, которые вам мешают:
- Не создавайте конфигурацию внутри Startup, это должно быть обработано в program.cs
- Имена свойств должны совпадать при привязке конфигурации к пользовательским классам
- Параметры должны быть настроены в
Configure
Ну, похоже, единственный способ решить мою проблему заключается в следующем:
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
стоимость.
Я не буду отмечать это как Ответ и буду ждать предложений других.