public DynamicKwikOptionsService( IServiceCollection services, IConfiguration configuration, RootKwikOptions rootKwikOptions) { Services = services; Configuration = configuration; RootKwikOptions = rootKwikOptions; }
public void Should_Inject_Only_One_Options() { // Given: var serviceCollection = new ServiceCollection(); // And: var rawConfiguration = @" { ""KwikOptions"": { ""OptionsTypes"": [ { ""OptionsPath"": ""SampleOptions"", ""Type"": ""KwikOptions.Tests.SampleOptions, KwikOptions.Tests"", ""Assembly"": ""KwikOptions.Tests.dll"" }, { ""OptionsPath"": ""SampleOptions"", ""Type"": ""KwikOptions.Tests.SampleOptions, KwikOptions.Tests"", ""Assembly"": ""KwikOptions.Tests.dll"" } ] }, ""SampleOptions"": { ""Value"": ""Hello"" } } "; // And: var configuration = new ConfigurationBuilder() .AddJsonFile(new InMemoryFileProvider(rawConfiguration), "sample.json", false, false) .Build(); // And: var options = new RootKwikOptions(); configuration.GetSection("KwikOptions").Bind(options); // And: var sut = new DynamicKwikOptionsService(serviceCollection, configuration, options); // When: sut.InjectOptions(); // Then: var sampleOptions = serviceCollection.BuildServiceProvider().GetServices <IOptions <SampleOptions> >(); Assert.Equal(1, sampleOptions.ToList().Count); }
public static IServiceCollection UseKwikOptions( this IServiceCollection services, IConfiguration configuration, string configurationRootPath) { var rootKwikOptions = new RootKwikOptions(); configuration.GetSection(configurationRootPath).Bind(rootKwikOptions); var kwikOptionsService = new DynamicKwikOptionsService( services, configuration, rootKwikOptions ); kwikOptionsService.InjectOptions(); return(services); }
public void InjectOptions() { var rootKwikOptions = new RootKwikOptions(); Configuration.GetSection(ConfigPath).Bind(rootKwikOptions); foreach (var optionsProvider in rootKwikOptions.OptionsProviders) { AssemblyUtilities.LoadAssemblyIfNotLoaded(optionsProvider.Assembly); Type optionsType = Type.GetType(optionsProvider.Type); var providerInstance = (IOptionsProvider)ActivatorUtilities .CreateInstance(ServiceCollection.BuildServiceProvider(), optionsType); providerInstance .ConfigureOption( ServiceCollection, Configuration.GetSection(optionsProvider.OptionsPath)); } }