// Copyright (c) .NET Foundation. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Microsoft.Extensions.Options.Infrastructure; using Xunit; namespace Microsoft.AspNetCore.Tests { public class ConfigurationTests { private class TestOptions { public string Message { get; set; } } private class ConfigureTestDefault : ConfigureDefaultOptions { public ConfigureTestDefault(IConfiguration config) : base(options => config.GetSection("Test").Bind(options)) { } } [Fact] public void ConfigureAspNetCoreDefaultsEnablesBindAgainstDefaultConfig() { var dic = new Dictionary { { "Test:Message", "yadayada"} }; var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(dic); var config = configurationBuilder.Build(); var services = new ServiceCollection() .AddSingleton(config) .AddOptions() .AddTransient, ConfigureTestDefault>() .ConfigureAspNetCoreDefaults(); var sp = services.BuildServiceProvider(); var options = sp.GetRequiredService>().Value; Assert.Equal("yadayada", options.Message); } [Fact] public void DefaultConfigIgnoredWithoutConfigureAspNetCoreDefaults() { var dic = new Dictionary { { "Test:Message", "yadayada"} }; var configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddInMemoryCollection(dic); var config = configurationBuilder.Build(); var services = new ServiceCollection() .AddSingleton(config) .AddOptions() .AddTransient, ConfigureTestDefault>(); var sp = services.BuildServiceProvider(); var options = sp.GetRequiredService>().Value; Assert.Null(options.Message); } } }