先看一下创建一个新的ASP.Net Core项目时,Startup.cs文件中的内容
public class Startup
{
// 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
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}
}
在Startup类中包含了两个方法:ConfigureServices()和Configure()方法。
ConfigureServices()方法
在ASP.Net Core中提供一个内置的依赖注入容器:IOC容器。IOC容器为服务的消费者直接提供所需的服务对象。这里需要注意的一点是:服务对象自身直接或间接依赖的对象已经在初始化的过程中被自动注入。
ConfigureServices()方法的作用:将服务Services注入到IOC容器中。注入的服务有两类:1.自定义的服务注入;2.Net Core自带的服务注入。
1.注入自定义服务的方法有三种,我们接下来看三种方法的区别
- services.AddTransient 瞬时注入:在每次请求时创建一个新的对象,请求结束后自动注销该对象。优点:每次请求都会创建一个新的对象,因此不同的请求之间数据完全独立,互不影响。
- services.AddSingleton 单例注入:系统启动时有且仅创建一个对象,以后每次请求使用的都是同一个对象。优点:简单易用,便于管理;缺点:会造成严重的数据污染,引发严重的问题。
- services.AddScoped 作用域注入:将一系列的请求或操作整合在一个事物Transient中,为事务Transient有且仅创建一个对象。在事物结束后系统注销对象。
2.注入.Net Core自带的服务,下面是添加EF服务:Entity Framework Core的代码
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))
);
Configure()方法
Configure()方法的作用:用来配置系统的HTTP请求通道Request Pipeline.别人访问我们的系统时,访问请求都是以HTTP的形式传入系统的。当有HTTP请求传入时,我们需要检查和处理HTTP请求。在ASP.Net Core中处理HTTP请求的任务就是由Configure()方法中的中间件完成,通过对中间件的有顺序的组合排列形成HTTP请求处理的管道Request Pipeline。因此这里我们有必要了解什么是中间件:
请求通道Request Pipeline
请求通道是由一系列有顺序的中间件组成。处理系统的HTTP请求。
中间件MiddleWare
中间件是组装到应用程序管道中以处理请求和响应的软件。我们通过IApplicationBuilder app来配置中间件,配置中间件的方法有:Use,Map,Run。
中间件MiddleWare的特点:
- 每一个中间件都可以通过截获,修改传递请求对象,也可以输出响应对象
- 在特定的情况下某些中间件可以做短路处理,直接向前端输出响应对象;如URL中间件
- 中间件是按照添加的顺序执行的