更新记录
转载请注明出处:
2022年11月17日 发布。
2022年11月16日 从笔记迁移到博客。
服务(Services)说明
服务是什么
服务是Web应用程序中提供功能的对象,为应用程序添加功能
服务是一个对象(Object),用于提供给Web应用程序各种功能
服务本质来讲只是为应用程序其他部分提供功能的对象
为什么需要服务
对象可以自己创建为什么还需要服务,因为服务被ASP.NET Core管理
可以更加便捷的管理这些对象,比如使用dependency injection(依赖注入)
中间件通常也使用服务来进行初始化
注册服务
注册服务基础
当我们谈论注册服务时
我们真正谈论的是所谓的服务容器
这是“注册”服务的地方
换句话说,这是告诉DI系统将接口与给定的具体类关联的地方
在ConfigureServices方法中注册服务
ConfigureServices方法在内部将接口与具体的类型关联
一旦我们在服务容器中注册了我们的服务
每当我们请求从应用程序中的其他位置请求使用给定的接口时
DI系统就会提供或“注入”与该接口相关联的具体类 (又称“依赖性”)
这意味着,如果我们需要将具体的类换成其他实现
则只需要在一个地方进行更改(ConfigureServices方法),其余的代码不需要更改
三种注册服务的类型
AddTransient: 瞬时,每次从服务容器请求服务时都会创建一个服务
AddScoped: 作用域,每个客户端请求(连接)都会创建一次服务
AddSingleton: 单例,服务创建一次并一直重新重复使用
配置Startup.cs文件
Startup.cs文件作用
StartUp类主要由三个类组成:
构造函数Startup
ConfigureServices()方法
Configure()方法
执行过程:
ASP.NET Core应用启动的时候,三个函数都会执行
第二次请求到时,构造函数已经执行过了,不会再执行
ConfigureServices()方法 和 Configure()方法 会再次执行
构造函数Startup作用:
接收一个实现IConfiguration接口的对象参数,这个参数表示配置信息
配置信息来自appsettings.json文件
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
ConfigureServices()方法作用:
注册服务(register services)到DI框架中
接收一个实现IServiceCollection接口的对象参数,这个参数表示
可以在该方法中添加应用程序需要的服务
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
Configure()方法作用:
管理请求管道(request pipeline)
请求管道由一系列处理Request的中间件(middleware)组成
该方法有两个参数IApplicationBuilder和IWebHostEnvironment
IApplicationBuilder参数用于管理请求管道
IWebHostEnvironment参数用于读取服务器环境信息
ASP.NET Core MVC
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
ASP.NET Core Razor Pages
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
ASP.NET Core Web API
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
内置服务-Configuration
配置服务自身不理解任何配置项的含义。只负责将各个配置文件(比如:appsetting.json、环境变量、命令行参数)的配置项进行合并,然后提供在程序中进行访问。