using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Infrastructure.Startups
{
    /// <summary>
    /// Program.cs里面的HostBuilder扩展
    /// </summary>
    public static class HostBuilderExtensions
    {
        /// <summary>
        /// Web 主机注入
        /// </summary>
        /// <param name="hostBuilder">Web主机构建器</param>
        /// <param name="assemblyName">外部程序集名称,如果HostingStartup存在多个程序集中可以使用;分隔,比如HostStartupLib;HostStartupLib2</param>
        /// <returns>IWebHostBuilder</returns>
        public static IWebHostBuilder Init(this IWebHostBuilder hostBuilder, string assemblyName)
        {
            hostBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, assemblyName);
            return hostBuilder;
        }

        /// <summary>
        /// 初始化程序扩展
        /// </summary>
        /// <param name="builder"></param>
        public static void UseAppStartup(this IWebHostBuilder hostBuilder)
        {
            // 自动装载配置
            hostBuilder.ConfigureAppConfiguration((hostingContext, config) =>
            {
                // 存储环境对象
                InternalApp.HostEnvironment = (IHostEnvironment)hostingContext.HostingEnvironment;

                // 加载配置
                //InternalApp.AddConfigureFiles(config, InternalApp.WebHostEnvironment);
            });
            // 自动注入 AddApp() 服务
            hostBuilder.ConfigureServices((services) =>
            {
                // 注册 Startup 过滤器
                //services.AddTransient<IStartupFilter, StartupFilter>();

                // 添加全局配置和存储服务提供器
                InternalApp.InternalServices = services;

                // 初始化应用服务
                //services.AddApp();
            });
        }
    }
}