前言
学习Net Core的个人笔记,记录
IOC注册
Startup类中的ConfigureServices方法是用于服务注册IOC
ConfigureServices这个方法是用于服务注册的,服务就是IOC里面的类
三种生命周期
IOC容器内的服务有三种生命周期
- Transient:每次请求都会创建一个新的实例
- Scoped:每次Web请求都会创建一个实例
- Singleton:一旦实例被创建,一直使用,直到应用停止
如何注册一个IOC服务
我们有一个类和一个接口,接口的实现类,这里不写,注册如下
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IStudentService,StudentService>();
}
写了一个单例的服务,已经注入了,调用后续再写
管道和中间件
示意图
下图很经典,用户的请求需要经过管道,管道内部可以写中间件,如果你什么都不写,那么请求返回的就是固定的,你加了中间件,就会有变化,比如权限验证,身份验证,MVC处理等中间件
管道方法
Startup类里面的Configure方法就是管道的方法,可以在里面写中间件
中间件
app.Run就是运行的一个中间件,现在我们写一个新的中间件
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
app.Run(async (context) =>
{
await context.Response.WriteAsync("许嵩!");
});
运行,可以发现,还是Hello World,根本没有许嵩,因为中间件根本没往下执行,可以这样设置
app.Use(async (context,next) =>
{
await context.Response.WriteAsync("Hello World!");
await next();
});
app.Run(async (context) =>
{
await context.Response.WriteAsync("许嵩!");
});
加了一个next,然后执行await next(); 这样就会执行按照顺序的下一个中间件
加日志观看
public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILogger<Startup> logger)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Use(async (context,next) =>
{
logger.LogInformation("管道1开启");
await context.Response.WriteAsync("Hello World!");
await next();
logger.LogInformation("管道1结束");
});
app.Run(async (context) =>
{
logger.LogInformation("管道2开启");
await context.Response.WriteAsync("许嵩!");
logger.LogInformation("管道2结束");
});
}
加了一个日志ILogger,这样再运行,注意这次运行不选择IIS了,我们选择Kestrel服务器,就是你的解决方案同名的那个,运行,可以查看日志