依赖注入(DI,Dependency Injection)是 ASP.NET Core 的内建协作机制。你可以把它理解成:
窗口人员不自己去“创建审批处、档案处、短信处”,
而是由总控系统按规则把这些部门能力分配给窗口。#注册服务
builder.Services.AddScoped<ICitizenService, CitizenService>();
builder.Services.AddScoped<IPermitService, PermitService>();
builder.Services.AddSingleton<ISystemClock, SystemClock>();#使用服务
public class PermitService : IPermitService
{
private readonly ICitizenService _citizenService;
public PermitService(ICitizenService citizenService)
{
_citizenService = citizenService;
}
public Task<PermitDto> CreateAsync(CreatePermitRequest request)
{
// 这里可以调用 _citizenService 做核验
throw new NotImplementedException();
}
}#三种常见生命周期
| 生命周期 | 含义 | 枢纽类比 |
|---|---|---|
Singleton |
整个应用只一份 | 全国总调度总机 |
Scoped |
每个请求一份 | 当前办事人这一次流程的专属工作单 |
Transient |
每次要就新建 | 一次性临时工具 |
#一个重要原则
数据库上下文、请求级业务服务,通常更适合 Scoped。
如果你把本应请求级的状态塞进 Singleton,就像把每个办事人的材料混进全国总台,迟早出事故。