Reputation: 8135
Trying to get access to IConfiguration
from within an IHostingStartup
implementation and constructor injection is not supported.
The normal Startup.cs
implementation allows for IConfiguration
to be injected making it easy to access from within ConfigureService()
and Configure()
methods.
What is the best practice way for gaining access to configuration?
Upvotes: 5
Views: 1050
Reputation: 8135
There is an overload on some builder methods (i.e. ConfigureLogging()
ConfigureAppConfiguration()
ConfigureServices()
that allows for a WebHostBuilderContext to be passed into the Action.
The WebHostBuilderContext provides access to the HostingEnvironment and Configuration
public class HostingStartupConfiguration : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
builder
.ConfigureLogging((context, builder) =>
{
// clear providers set from host application
if (context.HostingEnvironment.IsDevelopment())
{
...
}
})
.ConfigureAppConfiguration((context, builder) =>
{
if (context.HostingEnvironment.IsDevelopment())
Console.WriteLine("we are in dev mode");
...
})
.ConfigureServices((context, services) =>
{
...
// get assemblies based on configuration to load as Application Parts
var assemblies = GetControllerAssemblies(context.Configuration);
// register controllers application parts from external assemblies
foreach (var assembly in assemblies)
{
builder.AddApplicationPart(assembly);
}
...
});
}
Upvotes: 2