找回密码
 立即注册
首页 业界区 业界 第六章 依赖注入和服务配置

第六章 依赖注入和服务配置

硫辨姥 2025-9-26 11:52:29
6.1 依赖注入基础
什么是依赖注入

依赖注入(Dependency Injection,简称DI)是一种设计模式,它允许对象及其依赖项之间的松散耦合。在依赖注入模式中,对象不直接创建其依赖项,而是从外部接收已创建的依赖项实例。
依赖注入的核心原则:

  • 依赖反转原则:高层模块不应依赖低层模块,两者都应依赖抽象
  • 控制反转:控制流的反转,对象的创建和生命周期由外部容器管理
  • 显式依赖:类应明确声明其所有依赖项
6.2 服务生命周期

ASP.NET Core DI容器支持三种主要的服务生命周期:
Transient(瞬态)


  • 定义:每次请求服务时创建新实例
  • 注册方式:services.AddTransient()
  • 适用场景:轻量级、无状态服务
Scoped(作用域)


  • 定义:每个请求(HTTP请求)内共享同一实例
  • 注册方式:services.AddScoped()
  • 适用场景:需要保持请求内状态的服务,如数据库上下文
Singleton(单例)


  • 定义:应用程序生命周期内只创建一个实例
  • 注册方式:services.AddSingleton()
  • 适用场景:无状态服务、共享缓存、配置服务
6.3 选项模式 (Options Pattern)

基本用法

使用选项模式的基本步骤:

  • 创建选项类:
  1. public class SmtpSettings
  2. {
  3.     public const string SectionName = "Smtp";
  4.     public string Server { get; set; } = string.Empty;
  5.     public int Port { get; set; } = 25;
  6.     public string Username { get; set; } = string.Empty;
  7.     public string Password { get; set; } = string.Empty;
  8.     public bool EnableSsl { get; set; } = true;
  9.     public string FromEmail { get; set; } = string.Empty;
  10.     public string FromName { get; set; } = string.Empty;
  11. }
复制代码

  • 配置选项:
  1. // 在Program.cs中
  2. builder.Services.Configure<SmtpSettings>(
  3.     builder.Configuration.GetSection(SmtpSettings.SectionName));
复制代码

  • 在appsettings.json中添加配置:
  1. {
  2.   "Smtp": {
  3.     "Server": "smtp.example.com",
  4.     "Port": 587,
  5.     "Username": "user@example.com",
  6.     "Password": "SecurePassword123",
  7.     "EnableSsl": true,
  8.     "FromEmail": "no-reply@example.com",
  9.     "FromName": "My Application"
  10.   }
  11. }
复制代码

  • 使用选项:
  1. public class EmailService : IEmailService
  2. {
  3.     private readonly SmtpSettings _smtpSettings;
  4.     public EmailService(IOptions<SmtpSettings> smtpOptions)
  5.     {
  6.         _smtpSettings = smtpOptions.Value;
  7.     }
  8.     // 使用配置进行邮件发送
  9. }
复制代码
1.png


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册