Example #1
0
        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");
        }