Skip to content

Make IConfigurationRefresher instance available via DI #167

Closed

Description

@zhenlan

It's useful for user code to obtain the instance of IConfigurationRefresher so they can refresh configuration synchronously or write their own middleware etc.

Proposal

Add extension method below that user can call in ConfigureServices(...)

public static IServiceCollection AddAzureAppConfiguration(this IServiceCollection services)

Under the cover, this API will add IConfigurationRefresherAccessor to the DI.

public interface IConfigurationRefresherAccessor
{
    IEnumerable<IConfigurationRefresher> Refreshers { get; set; }
}

User code can then get the instances of IConfigurationRefresher (via IConfigurationRefresherAccessor) from the DI.

Note: the implementation of IConfigurationRefresherAccessor will need to get IConfiguration from DI and cast it to IConfigurationRoot etc, just like what we do in the middleware today.

Other Considerations

  • We may need to consider exposing other properties in IConfigurationRefresher so users can differentiate instances from one to another.
  • We may consider changing our middleware to obtain instances of IConfigurationRefresher in the same way. This means users must call AddAzureAppConfiguration before they can call UseAzureAppConfiguration.

cc: AA (@abhilasharora) Jimmy Campbell (@jimmyca15) Drago Draganov (@drago-draganov)

Activity

  1. drago-draganov commented on Jun 5, 2020

    @drago-draganov
    Contributor

    I don't think there is a need for IConfigurationRefresherAccessor. DI can inject IEnunmerable<IConfigurationRefresher> directly.

  2. zhenlan commented on Jun 5, 2020

    @zhenlan
    MemberAuthor

    We need to run the code that we have in the middleware today to get IEnunmerable<IConfigurationRefresher>, which is the reason I think we need IConfigurationRefresherAccessor. I will be glad if we don't have to. I will leave this to AA (@abhilasharora) to find out.

  3. drago-draganov commented on Jun 5, 2020

    @drago-draganov
    Contributor

    It's a standard mechanism to add multiple instances of the same type T. Then the DI makes it available by requesting IEnumerable<T>

  4. abhilasharora commented on Jun 5, 2020

    @abhilasharora
    Contributor

    I already have PR #78 out for changes that provide this functionality. I sent it last year, but it seems for some reason we decided to put it on hold.

  5. abhilasharora commented on Jul 23, 2020

    @abhilasharora
    Contributor

    These changes are now available in version 4.0.0-preview of the package.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions