摘要:IOptions单例模式,读取应用启动时的配置快照。适用于单例服务。IOptionsSnapshot每次请求都会重新计算配置值。生命周期:Scoped(作用域)。适合 Web 应用中的多请求场景。IOptionsMonitor单例模式,可监听配置变化(回调通知
生命周期
描述
使用场景示例
瞬态 每次解析都会创建新实例 轻量级、无状态服务 作用域 每个请求/作用域内一个实例 数据库上下文、工作单元 单例 应用程序整个生命周期一个实例 配置、日志、缓存服务 public void ConfigureServices(IServiceCollection services){
services.AddTransient
services.AddScoped
services.AddSingleton
}
结论:推荐构造函数注入
IServiceProvider:手动解析服务(一般少用)IServiceScopeFactory:创建新的作用域,常用于后台任务示例:
using (var scope = serviceScopeFactory.CreateScope){
var scopedService = scope.ServiceProvider.GetRequiredService
}
services.AddSingleton
var descriptor = services.First(x => x.ServiceType == typeof(IMyService));
services.Remove(descriptor);
25. Options 模式(IOptions, IOptionsSnapshot, IOptionsMonitor)
IOptions
单例模式,读取应用启动时的配置快照。适用于单例服务。
IOptionsSnapshot
每次请求都会重新计算配置值。生命周期:Scoped(作用域)。适合 Web 应用中的多请求场景。
IOptionsMonitor
单例模式,可监听配置变化(回调通知)。适合后台服务、长生命周期组件。
注册示例:
services.Configure26. IHostedService / BackgroundService 与 DI
IHostedService
ASP.NET Core 提供的后台任务接口
BackgroundService
IHostedService的抽象基类,简化使用
DI 特点
可直接构造函数注入单例/瞬态服务
若需要 Scoped 服务,则必须用 IServiceScopeFactory创建新作用域
示例:
public class MyService{
private readonly IConfiguration _config;
public MyService(IConfiguration config)
{
var key = config["MyKey"];
}
}
示例:
public class MyService{
private readonly ILogger
public MyService(ILogger
public void DoSomething
=> _logger.LogInformation("执行了操作");
}
示例:
var mockService = new MockmockService.Setup(s => s.Get).Returns("test");
var controller = new MyController(mockService.Object);
来源:opendotnet
