设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 680|回复: 0

.net core项目中自定义服务的实现步骤

[复制链接]

  离线 

TA的专栏

  • 打卡等级:常驻代表
  • 打卡总天数:31
  • 打卡月天数:0
  • 打卡总奖励:422
  • 最近打卡:2025-10-31 16:35:55
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
382
主题
364
精华
0
金钱
1581
积分
812
注册时间
2023-2-10
最后登录
2025-10-31

发表于 2025-9-1 02:14:44 | 显示全部楼层 |阅读模式

.NET Core项目中自定义服务的实现步骤详解

导语

在.NET Core开发中,依赖注入(DI)是一个核心功能,它允许我们以松耦合的方式组织代码。自定义服务是实现业务逻辑的重要组件,本文将详细介绍在.NET Core项目中创建和使用自定义服务的完整步骤,包括核心概念、使用场景和实战示例。

核心概念解释

自定义服务是指开发者根据业务需求创建的特定功能类,这些类通过.NET Core的依赖注入系统进行管理。服务通常分为:

  • 瞬时服务(Transient):每次请求都创建新实例
  • 作用域服务(Scoped):同一请求内共享实例
  • 单例服务(Singleton):整个应用生命周期共享一个实例

使用场景

自定义服务适用于以下场景:

  • 封装业务逻辑
  • 数据访问层抽象
  • 第三方服务集成
  • 跨组件共享功能
  • 单元测试模拟

实现步骤

1. 创建服务接口

  1. public interface IEmailService
  2. {
  3. Task SendEmailAsync(string to, string subject, string body);
  4. }
复制代码

2. 实现服务类

  1. public class EmailService : IEmailService
  2. {
  3. private readonly ILogger<EmailService> _logger;
  4. public EmailService(ILogger<EmailService> logger)
  5. {
  6. _logger = logger;
  7. }
  8. public async Task SendEmailAsync(string to, string subject, string body)
  9. {
  10. _logger.LogInformation($"准备发送邮件到: {to}");
  11. // 实际发送邮件逻辑
  12. await Task.Delay(100); // 模拟异步操作
  13. _logger.LogInformation($"邮件发送成功: {subject}");
  14. }
  15. }
复制代码

3. 注册服务

  1. Startup.cs
复制代码
  1. Program.cs
复制代码
中注册服务:

  1. // 瞬态服务
  2. builder.Services.AddTransient<IEmailService, EmailService>();
  3. // 作用域服务
  4. // builder.Services.AddScoped<IEmailService, EmailService>();
  5. // 单例服务
  6. // builder.Services.AddSingleton<IEmailService, EmailService>();
复制代码

4. 注入使用服务

在控制器中使用:

  1. [ApiController]
  2. [Route("api/[controller]")]
  3. public class NotificationController : ControllerBase
  4. {
  5. private readonly IEmailService _emailService;
  6. public NotificationController(IEmailService emailService)
  7. {
  8. _emailService = emailService;
  9. }
  10. [HttpPost("send")]
  11. public async Task<IActionResult> SendEmail([FromBody] EmailRequest request)
  12. {
  13. await _emailService.SendEmailAsync(request.To, request.Subject, request.Body);
  14. return Ok();
  15. }
  16. }
复制代码

高级用法

服务工厂注册

  1. builder.Services.AddTransient<IEmailService>(provider =>
  2. {
  3. var logger = provider.GetRequiredService<ILogger<EmailService>>();
  4. return new EmailService(logger);
  5. });
复制代码

多实现服务

  1. public interface IMessageService { }
  2. public class SmsService : IMessageService { }
  3. public class PushService : IMessageService { }
  4. // 注册
  5. builder.Services.AddTransient<IMessageService, SmsService>();
  6. builder.Services.AddTransient<IMessageService, PushService>();
  7. // 获取所有实现
  8. public class NotificationService
  9. {
  10. private readonly IEnumerable<IMessageService> _messageServices;
  11. public NotificationService(IEnumerable<IMessageService> messageServices)
  12. {
  13. _messageServices = messageServices;
  14. }
  15. }
复制代码

优缺点分析

优点: - 松耦合设计,易于维护 - 便于单元测试 - 生命周期管理自动化 - 促进关注点分离

缺点: - 学习曲线较陡 - 过度使用会导致依赖关系复杂 - 调试可能更困难

实战案例:缓存服务实现

1. 定义缓存接口

  1. public interface ICacheService
  2. {
  3. T Get<T>(string key);
  4. void Set<T>(string key, T value, TimeSpan? expiry = null);
  5. void Remove(string key);
  6. }
复制代码

2. 实现内存缓存服务

  1. public class MemoryCacheService : ICacheService
  2. {
  3. private readonly IMemoryCache _cache;
  4. public MemoryCacheService(IMemoryCache cache)
  5. {
  6. _cache = cache;
  7. }
  8. public T Get<T>(string key)
  9. {
  10. return _cache.Get<T>(key);
  11. }
  12. public void Set<T>(string key, T value, TimeSpan? expiry = null)
  13. {
  14. var options = new MemoryCacheEntryOptions();
  15. if (expiry.HasValue)
  16. {
  17. options.SetAbsoluteExpiration(expiry.Value);
  18. }
  19. _cache.Set(key, value, options);
  20. }
  21. public void Remove(string key)
  22. {
  23. _cache.Remove(key);
  24. }
  25. }
复制代码

3. 注册服务

  1. builder.Services.AddMemoryCache();
  2. builder.Services.AddSingleton&lt;ICacheService, MemoryCacheService&gt;();
复制代码

4. 使用示例

  1. public class ProductService
  2. {
  3. private readonly ICacheService _cache;
  4. private readonly IProductRepository _repository;
  5. public ProductService(ICacheService cache, IProductRepository repository)
  6. {
  7. _cache = cache;
  8. _repository = repository;
  9. }
  10. public async Task<Product> GetProductByIdAsync(int id)
  11. {
  12. string cacheKey = $"product_{id}";
  13. var product = _cache.Get<Product>(cacheKey);
  14. if (product == null)
  15. {
  16. product = await _repository.GetByIdAsync(id);
  17. if (product != null)
  18. {
  19. _cache.Set(cacheKey, product, TimeSpan.FromMinutes(10));
  20. }
  21. }
  22. return product;
  23. }
  24. }
复制代码

小结

在.NET Core项目中实现自定义服务是构建可维护、可测试应用程序的关键步骤。通过本文的介绍,我们了解了:

  • 定义服务接口和实现类的基本方法
  • 不同生命周期服务的注册方式
  • 在控制器和其他服务中注入使用
  • 高级用法如工厂注册和多实现处理
  • 完整的缓存服务实战案例

合理使用自定义服务可以显著提高代码质量,建议根据实际业务需求选择适当的服务生命周期,并遵循接口隔离原则设计服务接口。

到此这篇关于.net_core项目中自定义服务的实现步骤有哪些的文章就介绍到这了,更多相关.net_core项目中自定义服务的实现步骤有哪些内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表