J'ai écrit un ConfigurationProvider
personnalisé avec le framework d'entité. Étant donné que je souhaite également le mettre à jour pendant l'exécution, j'ai créé un IWritableableOption
.
J'ai besoin de rafraîchir la configuration après la mise à jour. Cela peut être fait via IConfigurationRoot.Reload
.
Cependant, comment puis-je obtenir le IConfigurationRoot
dans .net core 2?
Ce que j'ai trouvé, c'est que dans les versions précédentes, le IConfigurationRoot
faisait partie du démarrage. Dans .net core 2 cependant, nous n'avons que le type plus simple IConfiguration
:
public Startup(IConfiguration configuration)
{
// I tried to change this to IConfigurationRoot,
// but this results in an unresolved dependency error
Configuration = configuration;
}
public IConfiguration Configuration { get; }
J'ai également découvert que je peux obtenir ma propre instance en utilisant
WebHost.CreateDefaultBuilder(args).ConfigureAppConfiguration(context, builder) => {
var configurationRoot = builder.build()
})
Mais je veux mettre à jour la configuration utilisée par Startup.
Alors, comment puis-je obtenir le IConfigurationRoot
utilisé par Startup
pour l'injecter dans ma collection de services?
Merci à Dealdiane's commentaire.
On peut abattre le IConfiguration
:
public Startup(IConfiguration configuration)
{
Configuration = (IConfigurationRoot)configuration;
}
public IConfigurationRoot Configuration { get; }
Je ne suis toujours pas sûr, si c'est le chemin prévu, car IConfiguration
ne fait aucune garantie sur IConfigurationRoot
.
Ou vous pouvez l'injecter avant l'initialisation du Startup
:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
IConfigurationRoot configurationRoot = null;
return WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, builder) =>
{
configurationRoot = builder.Build();
})
.ConfigureServices(services =>
{
services.AddSingleton<IConfigurationRoot>(configurationRoot);
services.AddSingleton<IConfiguration>(configurationRoot);
})
.UseStartup<Startup>();
}
}