using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Configs;
using Hncore.Pass.Manage.Repository;
using Hncore.Pass.Manage.Util;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Hncore.Pass.Manage
{
///
/// 应用程序启动类(主要完成服务注册和中间件注册,构建HTTP请求管道)
/// 应用启动流程:应用启动 -> Startup构造函数 -> ConfigureServices方法 -> Configure方法
///
///
public class Startup
{
///
/// 配置信息对象
///
public IConfiguration Configuration { get; }
///
/// 构造函数(第1个被执行的函数)
///
/// 提供了当前应用程序的运行的宿主环境配置信息象
///
public Startup(IHostingEnvironment env)
{
/*
appsettings.Development.json中配置了开发环境专用配置信息
appsettings.Production.json中配置了生产环境专用配置信息
appsettings.json保存了两个环境均会用到的公共配置信息
此处主要是加载公共配置信息和专用配置信息,例如如果当前为
开发模式,会加载appsettings.json和appsettings.Development.json两个文件中的配置信息
生产模式,会加载appsettings.json和appsettings.Production.json两个文件中的配置信息
*/
Configuration = env.UseAppsettings();
}
///
/// 服务配置,相当于Java项目中的spring.xml,用来将配置对象添加到容器中管理起来备用(第2个被执行的函数)
///
/// 服务集合对象(可以理解为内置的依赖注入容器)
/// 构造好的服务提供对象
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.Configure(Configuration);//加载appsettiong.xxx.json中的配置信息到AppSettings对象中备用
//添加EF数据库上下文对象
services.AddDbContext(c => c.UseMySql(Configuration["MySql"]));
//配置Redis
RedisHelper.Initialization(new CSRedis.CSRedisClient(Configuration["Redis"]));
//HttpClient配置
services.AddHttpClient();
services.MyServicesSpecialUseConfigure();//本Web应用专用配置
//根据应用配置信息对象、编译版本、服务选项对象创建服务提供对象
IServiceProvider result = services.Init(Configuration, CompatibilityVersion.Version_2_2, new ServiceOption
{
//启用全局授权过滤器(由ManageAuthFilter类具体实现)
UseGlobalManageAuthFilter = false
});
return result;
}
///
/// 请求管道配置,可以将一些中间组件添加到app对象中
///
/// 用于构建应用程序的请求管道
/// 提供了当前应用程序的运行的宿主环境配置信息
/// 日志工厂
///
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime applicationLifetime)
{
//初始化应用程序构建器,启用NLog、统一错误异常处理、跨域请求、MVC等
app.Init(loggerFactory, applicationLifetime);
// app.MySpecialUseConfigure(env, loggerFactory);//本Web应用专用配置
}
}
}