Program类
public class Program { /// <summary> /// 应用程序入口 /// 1.asp.netcore 本质上是控制台程序 /// </summary> /// <param name="args"></param> public static void Main(string[] args) { //执行完build之后,就从控制台程序变成了asp.netcore CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
Startup 类
public class Startup { private readonly IConfiguration _configuration; /// <summary> /// 通过构造函数注入 /// </summary> /// <param name="configuration"></param> public Startup(IConfiguration configuration) { _configuration = configuration; var aa = _configuration["FyyAspnetcore:Name"];// 获取 appsettings.json文件的数据 } // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 //运行时同通过约定来调用 这个类 的两个方法。先调用 ConfigureServices、再调用 Configure. /// <summary> /// 负责依赖注入配置 /// </summary> /// <param name="services"></param> public void ConfigureServices(IServiceCollection services) { /*DI的优点: * 1.解耦,没有强依赖,Controller与具体的服务类解耦, * 2.利于单元测试 * 3.不需要了解具体的服务类:Controller 不需要了解服务类及其工作细节。 * 4.也不需要管理服务类的生命周期:Controller 不需要管理服务类的生命周期,生命周期交给IOC容器DI来控制。 */ //2.当IClock 被请求时,IOC容器会返回一个CnClock的实例。 services.AddSingleton<IClock, CnClock>();//AddSingleton 表示所注册的服务周期 是整个应用程序生存期间,整个应用程序只有一个实例,只有应用程序停止,才会被销毁。 //services.AddScoped<IClock, USClock>;//所注册的服务的生命周期是整个请求期间。一次web请求产生一个实例,web请求处理完的时候,生命周期就结束了。 //services.AddTransient<IClock, USClock>;//所注册的服务的生命周期是暂时的,服务每次没请求的时候,都会实例化一个对象。 //services.AddControllers();//注册webapi的服务 //services.AddControllersWithViews();//注册mvc的服务 //将配置文件的Json,映射到类中。(配置到类中,配置依赖注入) services.Configure<FyyAspnetcore>(_configuration.GetSection("FyyAspnetcore")); } /// <summary> /// Development环境变量时,走这个方法。可以针对不同的环境,使用不同的方法。 /// </summary> /// <param name="app"></param> /// <param name="env"></param> //public void ConfigureDevelopment(IApplicationBuilder app, IWebHostEnvironment env) //{ //} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. /// <summary> /// 负责中间件,配置了asp.netcore http请求的管道。http请求从管道进来,处理完之后再从管道回去。如果管道什么都没有,请求进来,再回去,就什么都不会发生。 /// 放在管道中能处理请求的东西,就是中间件(middleware)。 /// </summary> /// <param name="app">是一个服务,通过依赖注入的方式注入进来,注入的是服务的接口</param> /// <param name="env">依赖注入</param> public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { //判断环境变量 //env.IsEnvironment("OK"); 判断自定义环境变量 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage();//开发模式下插入到管道的第一个中间件。 } // app.UseAuthentication();//使用授权中间件 app.UseHttpsRedirection();//https 重定向中间件,强制客户端使用ssl协议。 //如果需要使用html、js、css 等静态文件,就需要使用 UseStaticFiles 中间件,如mvc。 //如果不使用这个中间件,客户端就访问不了这些静态文件。 app.UseStaticFiles(); app.UseRouting();//路由中间件。会检查在应用中已经注册的端点。 app.UseEndpoints(endpoints => //注册端点,端点就是进来的http请求的url的结尾那部分。这部分由端点中间件处理。 { endpoints.MapGet("/", async context =>// 以/结尾的url,映射到下面的表达式中。 { await context.Response.WriteAsync("Hello World!"); }); //MVC的路由端点,路由模板,路由表的形式 //endpoints.MapControllerRoute( // name:"default", // pattern:"{controller=Home}/{action=Index}/{id?}" // ); //使用这种方式,可以在controller或action上添加路由,不需要添加路由表。 // endpoints.MapControllers(); }); } }
appsettings.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "FyyAspnetcore": { "Name": "Fengyinyong", "Age": 30 } }