public void ReloadHappyPath() { var source = new TestConfigurationSource(); source.Provider.Set("CustomLogProvider:Foo", "123"); source.Provider.Set("CustomLogProvider:Bar", "abc"); var configuration = new ConfigurationBuilder() .Add(source) .Build(); var services = new ServiceCollection(); services.Configure <TestOptions>("MyLogger", configuration.GetSection("CustomLogProvider")); var serviceProvider = services.BuildServiceProvider(); var optionsMonitor = serviceProvider.GetRequiredService <IOptionsMonitor <TestOptions> >(); var options = optionsMonitor.Get("MyLogger"); Func <TestOptions, ILogProvider> createLogProvider = o => new TestLogProvider { Foo = o.Foo, Bar = o.Bar }; string name = "MyLogger"; Action <TestOptions> configureOptions = null; var reloadingLogProvider = ReloadingLogProviderOfTestOptions.New(optionsMonitor, options, createLogProvider, name, configureOptions); TestLogProvider logProvider1 = reloadingLogProvider._logProvider; logProvider1.Foo.Should().Be(123); logProvider1.Bar.Should().Be("abc"); source.Provider.Set("CustomLogProvider:Foo", "456"); source.Provider.Set("CustomLogProvider:Bar", "xyz"); source.Provider.Reload(); TestLogProvider logProvider2 = reloadingLogProvider._logProvider; logProvider2.Should().NotBeSameAs(logProvider1); logProvider2.Foo.Should().Be(456); logProvider2.Bar.Should().Be("xyz"); }