Ejemplo n.º 1
0
 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);
        }
Ejemplo n.º 4
0
        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));
            }
        }