Ejemplo n.º 1
0
        public static void Run()
        {
            var builder = new ConfigurationBuilder();

            builder.AddJsonFile(null, $@"C:\WorkStation\Code\GitHubCode\CoreApp\CoreWebApp\appsettings.json", true, true);
            var configuration = builder.Build();

            Task.Run(() => {
                ChangeToken.OnChange(() => configuration.GetReloadToken(), () => {
                    Console.WriteLine("Configuration has changed");
                });
            });
            var optionsChangeTokenSource = new ConfigurationChangeTokenSource <MyOption>(configuration);
            var configureOptions         = new NamedConfigureFromConfigurationOptions <MyOption>(string.Empty, configuration);
            var optionsFactory           = new OptionsFactory <MyOption>(new List <IConfigureOptions <MyOption> >()
            {
                configureOptions
            }, new List <IPostConfigureOptions <MyOption> >());
            var optionsMonitor = new OptionsMonitor <MyOption>(optionsFactory, new List <IOptionsChangeTokenSource <MyOption> >()
            {
                optionsChangeTokenSource
            }, new OptionsCache <MyOption>());

            optionsMonitor.OnChange((option, name) => {
                Console.WriteLine($@"optionsMonitor Detected Configuration has changed,current Value is {option.TestOption}");
            });
            Thread.Sleep(600000);
        }
Ejemplo n.º 2
0
        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
        {
            var webHostBuilder = new WebHostBuilder();

            if (args?.Any() == true)
            {
                var config = new ConfigurationBuilder().AddCommandLine(args).Build();

                webHostBuilder.UseConfiguration(config);
            }

            // Kestrel
            webHostBuilder.UseKestrel((context, options) =>
            {
                options.AddServerHeader = false;

                var listenUrls = webHostBuilder.GetSetting(WebHostDefaults.ServerUrlsKey);

                if (string.IsNullOrWhiteSpace(listenUrls))
                {
                    // Load Kestrel Endpoint config in app setting
                    options.Configure(context.Configuration.GetSection("Kestrel"));
                }
            });

            // Content
            var contentRoot = webHostBuilder.GetSetting(WebHostDefaults.ContentRootKey);

            if (string.IsNullOrWhiteSpace(contentRoot))
            {
                webHostBuilder.UseContentRoot(Directory.GetCurrentDirectory());
            }

            // Capture Error
            webHostBuilder.CaptureStartupErrors(true);

            // DI Validate
            webHostBuilder.UseDefaultServiceProvider((context, options) =>
            {
                options.ValidateScopes = context.HostingEnvironment.IsDevelopment();
            });

            // App Config
            webHostBuilder.ConfigureAppConfiguration((context, configBuilder) =>
            {
                // Delete all default configuration providers
                configBuilder.Sources.Clear();

                configBuilder.SetBasePath(Directory.GetCurrentDirectory());

                configBuilder.AddJsonFile(ConfigurationFileName.AppSettings, true, true);

                var env = context.HostingEnvironment;

                if (env.IsDevelopment())
                {
                    var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));

                    if (appAssembly != null)
                    {
                        configBuilder.AddUserSecrets(appAssembly, optional: true);
                    }
                }

                configBuilder.AddEnvironmentVariables();

                if (args?.Any() == true)
                {
                    configBuilder.AddCommandLine(args);
                }
            });

            // Service Config

            webHostBuilder.ConfigureServices((context, services) =>
            {
                // Hosting Filter

                services.PostConfigure <HostFilteringOptions>(options =>
                {
                    if (options.AllowedHosts != null && options.AllowedHosts.Count != 0)
                    {
                        return;
                    }

                    var hosts = context
                                .Configuration["AllowedHosts"]?
                                .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

                    options.AllowedHosts = (hosts?.Length > 0 ? hosts : new[] { "*" });
                });

                // Hosting Filter Notification

                var hostingFilterOptions =
                    new ConfigurationChangeTokenSource <HostFilteringOptions>(context.Configuration);

                services.AddSingleton <IOptionsChangeTokenSource <HostFilteringOptions> >(hostingFilterOptions);

                services.AddTransient <IStartupFilter, HostFilteringStartupFilter>();

                // IIS
                var iisConfig = context.Configuration.GetSection("IIS");

                var isUseIis = iisConfig?.GetValue("IsUseIIS", false) ?? false;

                if (isUseIis)
                {
                    webHostBuilder.UseIIS();
                }

                var isUseIisIntegration = iisConfig?.GetValue("IsUseIISIntegration", false) ?? false;

                if (isUseIisIntegration)
                {
                    webHostBuilder.UseIISIntegration();
                }
            });

            // Startup
            webHostBuilder.UseStartup(PlatformServices.Default.Application.ApplicationName);

            return(webHostBuilder);
        }
Ejemplo n.º 3
0
        public static IServiceCollection WatchOptions <T>(this IServiceCollection @this, IConfiguration configuration)
        {
            ConfigurationChangeTokenSource <T> changeTokenSource = new ConfigurationChangeTokenSource <T>(configuration);

            return(@this.AddSingleton <IOptionsChangeTokenSource <T> >(changeTokenSource));
        }