百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

ASP.NET Core面试精讲系列二_asp.net core教学视频

haoteby 2025-10-02 19:12 19 浏览

dotNET跨平台2025-09-28 08:01:58

16. 什么是依赖注入?为什么要使用?

  • 定义

    依赖注入(Dependency Injection, DI)是一种设计模式:将依赖项(服务/对象)通过外部传递(注入)给类,而不是在类内部直接创建。

  • 优点

    • 促进 松耦合(类不再依赖具体实现,而是依赖接口/抽象)
    • 提高 可测试性(可以方便替换依赖,例如单元测试中的 Mock)
    • 实现 关注点分离(业务逻辑与对象创建解耦)

17. ASP.NET Core 内置 DI 容器:能力与局限

  • 能力

    • 构造函数注入(官方推荐)

    • 生命周期管理:瞬态 (Transient)、作用域 (Scoped)、单例 (Singleton)

    • 支持 IEnumerable注入
    • 支持开放泛型(如 IRepository
    • 可通过 IServiceProvider手动解析
  • 局限

    • 不支持 命名注册(无法根据名称区分不同实现)
    • 属性注入支持有限(需手工扩展或第三方容器)
    • 功能相对基础,不如 Autofac、StructureMap等第三方容器强大

18. 不同服务生命周期:瞬态、作用域、单例

生命周期

描述

使用场景示例

瞬态

每次解析都会创建新实例

轻量级、无状态服务

作用域

每个请求/作用域内一个实例

数据库上下文、工作单元

单例

应用程序整个生命周期一个实例

配置、日志、缓存服务

19. 在 ConfigureServices 注册服务

public void ConfigureServices(IServiceCollection services)
{
services.AddTransient
services.AddScoped
services.AddSingleton
}

20. 在控制器、Razor Pages、中间件中解析依赖

  • 控制器:构造函数注入(推荐)
  • Razor Pages:在 PageModel 构造函数注入
  • 中间件
    • 构造函数注入(推荐)

    • 或通过 IApplicationBuilder.ApplicationServices手动解析(不推荐,除非特殊场景)

21. 构造函数注入 vs 属性注入

  • 构造函数注入

    • ASP.NET Core 原生支持

    • 推荐方式,保证依赖不可变、清晰

  • 属性注入

结论:推荐构造函数注入

22. 使用 IServiceProvider / IServiceScopeFactory

  • IServiceProvider:手动解析服务(一般少用)
  • IServiceScopeFactory:创建新的作用域,常用于后台任务

示例:

using (var scope = serviceScopeFactory.CreateScope)
{
var scopedService = scope.ServiceProvider.GetRequiredService
}

23. 作用域服务在后台任务中的行为

  • 默认情况:作用域服务与 HTTP 请求生命周期绑定

  • 后台任务:没有请求上下文,不能直接注入 Scoped 服务

  • 解决方法:通过 IServiceScopeFactory手动创建作用域来解析 Scoped 服务

24. 覆盖默认 DI 行为(移除或替换服务)

    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创建新作用域

27. 注入配置提供者(IConfiguration)

  • IConfiguration已自动注册,可通过构造函数注入

示例:

public class MyService
{
private readonly IConfiguration _config;
public MyService(IConfiguration config)
{
var key = config["MyKey"];
}
}

28. 注入日志(ILogger)

示例:

public class MyService
{
private readonly ILogger
public MyService(ILogger

public void DoSomething
=> _logger.LogInformation("执行了操作");
}

29. 处理循环依赖

  • 定义:当两个服务直接或间接依赖彼此时产生循环引用

  • 常见解决方法

    • 重构以消除循环依赖

    • 使用 Lazy或工厂模式延迟创建
    • 拆分服务职责,降低耦合

30. 在单元测试中模拟依赖

示例:

var mockService = new Mock
mockService.Setup(s => s.Get).Returns("test");

var controller = new MyController(mockService.Object);

优点:可隔离测试目标,验证逻辑,而不是依赖外部服务

相关推荐

如何为MySQL服务器和客户机启用SSL?

用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...

OpenVPN客户端配置_openvpn客户端配置文件解析

...

k8s 证书问题排查_k8s dashboard 证书

从去年开始一些老项目上陆陆续续出现一些列的证书问题,(证书原理这里就不说了,官方文档一堆)多数刚开始的表现就是节点的kubelet服务起不来,节点状态NotReady表现日志如下failed...

企业级网络互通方案:云端OpenVPN+爱快路由器+Win11互联实战

企业级网络互通方案:OpenVPN搭建公有云+爱快路由器+Win11三地互联实战指南「安全高效」三地局域网秒变局域网实施环境说明...

OpenV** Server/Client配置文件详解

Server配置详解...

接口基础认知:关键信息与合规前提

1.核心技术参数(必记)...

S交换机通过SSH登录设备配置示例(RADIUS认证+本地认证独立)

说明:●本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。●通过不同的管理域来实现RADIUS认证与本地认证两种方式同时使用,两...

SSL证书如何去除私钥密码保护_ssl证书怎么取消

有时候我们在生成证书的时候可以加入了密码保护。然后申请到证书安装到了web服务器。但是这样可能会带来麻烦。每次重启apache或者nginx的时候,都需要输入密码。那么SSL证书如何去除私钥密码保护。...

SSL证书基础知识与自签名证书生成指南

一、证书文件类型解析...

S交换机通过SSH登录设备配置示例(RADIUS认证)

说明:本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。假设已在RADIUS服务器上创建了用户名yc123,密码test#123。对...

HTTPS是什么?加密原理和证书。SSL/TLS握手过程

秘钥的产生过程非对称加密...

HTTPS TLS握手流程_进行tls握手

1.客户端向服务器发送`ClientHello`消息,包括支持的TLS版本、加密套件、随机数等信息。2.服务器收到`ClientHello`消息后,解析其中的信息,并根据配置选择一个加密套件。3....

Spring Boot 单点登录(SSO)实现_spring boot 单点登录jwt

SpringBoot单点登录(SSO)实现全指南单点登录(SingleSign-On,SSO)是一种身份验证机制,允许用户使用一组凭证登录多个相关但独立的系统。在微服务架构和企业级系统中,SS...

源码分享:在pdf上加盖电子签章_pdf如何加盖电子公章

在pdf上加盖电子签章,并不是只是加个印章图片,。而是要使用一对密钥中的私钥对文件进行签字。为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的。这就是我们常说的:私...

微信支付商户API证书到期 怎么更换

微信支付商户API证书到期更换是一个非常重要的操作,需要仔细按照流程进行。如果证书过期,所有通过API的支付、退款等操作都会失败,将直接影响您的业务。请按照以下详细步骤进行操作:重要前提:分清...