I have this MagicSgtrings class that holds some constants which I'm using in my worker service.
internal class MagicStrings
{
public const string HttpClientName = "X_HttpClient";
...
}
usage: MagicStrings.HttpClientName
I also have those values set in appsettings.json, MagicStrings being used like fallback for configuration settings:
public Worker( IConfiguration config) => (_config) = (config){
...
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
...
var httpClient = _httpClientFactory.CreateClient(
_config.GetValue<string>("HttpClientBasicConfig:HttpClientName")
?? MagicStrings.HttpClientName);
}
}
What I would like is to have this _config.GetValue<string>("HttpClientBasicConfig:HttpClientName") ?? MagicStrings.HttpClientName) moved into MagicStrings class something like this:
internal class MagicStrings
{
private readonly IConfiguration _config = null!;
public MagicStrings(IConfiguration config) => (_config) = (config);
public const string HttpClientName =
_config.GetValue<string>("HttpClientBasicConfig:HttpClientName")
?? "X_HttpClient";
or
public static readonly string HttpClientName2 =
_config.GetValue<string>("HttpClientBasicConfig:HttpClientName")
?? "X_HttpClient";
...
So I can used it like MagicStrings.HttpClientName in the entire app
const, unless you have some tool to update the value in code for each constant shortly before compile, and then any changes to the config won't be reflected once the application is compiled.private static IConfiguration _configand initialize theHttpClientName2value in a static constructor but kind feels like not a good way to do it