ASP.NET Core面试精讲系列二

B站影视 日本电影 2025-09-28 08:39 2

摘要: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.Configure

26. 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 Mock
mockService.Setup(s => s.Get).Returns("test");

var controller = new MyController(mockService.Object);

来源:opendotnet

相关推荐