Mr. Kraus
Mr. Kraus

Reputation: 8135

How to access Configuration within an IHostingStartup implementation?

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

Answers (1)

Mr. Kraus
Mr. Kraus

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

Related Questions