一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性

简介: 一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性

前言:什么是依赖注入

依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,ASP.NET Core 提供了内置的依赖注入容器,可以帮助我们轻松地将服务注册到容器中。

本文主要通过一个简单的例子来阐述 ASP.NET Core 依赖注入 的使用方式,我们通常在构造方法中注入,如果使用频率低,也可以通过方法参数直接注入到方法。

Step By Step 步骤

  1. 创建一个 Asp.NET Core Web API 项目
  2. 创建一个用于测试的服务类
namespace 服务注入1;
public class MyService1
{
  public IEnumerable<string> GetNames()
  {
    return new string[] { "Tom", "Zack", "Jack" };
  }
}

3.打开 Program.cs 编写注册此服务的代码

using 服务注入1;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// 注册自定义的服务
builder.Services.AddScoped<MyService1>(); 
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
  app.UseSwagger();
  app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

4.在控制器中依赖注入方式使用此服务(重点看注释

using Microsoft.AspNetCore.Mvc;
using 服务注入1;
namespace 服务注入1.Controllers
{
  [ApiController]
  [Route("[controller]/[action]")]
  public class WeatherForecastController : ControllerBase
  {
    // 1.定义自定义服务
    private readonly MyService1 _myService1;
    private static readonly string[] Summaries = new[]
    {
      "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };
    private readonly ILogger<WeatherForecastController> _logger;
    // 2.通过构造方法注入
    public WeatherForecastController(ILogger<WeatherForecastController> logger, MyService1 myService1)
    {
      _logger = logger;
      _myService1 = myService1;
    }
    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
      return Enumerable.Range(1, 5).Select(index => new WeatherForecast
      {
        Date = DateTime.Now.AddDays(index),
        TemperatureC = Random.Shared.Next(-20, 55),
        Summary = Summaries[Random.Shared.Next(Summaries.Length)]
      })
      .ToArray();
    }
    // 3.直接使用服务的方法
    [HttpGet]
    public string Test2(string name)
    {
      var names = _myService1.GetNames();
      return string.Join(",", names) + ",hello:" + name;
    }
    // 4.方法参数注入,用于使用频率比较低的服务
    // [FromServices] MyService1 _myService2
    // 只有 ASP.NET Core 的控制器类的操作方法才能用[FromServices]注入服务,普通的类是不支持这种写法的
    [HttpGet]
    public string Test([FromServices] MyService1 _myService2, string name)
    {
      // 直接使用服务的方法
      var names = _myService2.GetNames();
      return string.Join(",", names) + ",hello:" + name;
    }
  }
}


相关文章
|
7天前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
17天前
|
开发框架 监控 .NET
开发者的革新利器:ASP.NET Core实战指南,构建未来Web应用的高效之道
【8月更文挑战第28天】本文探讨了如何利用ASP.NET Core构建高效、可扩展的Web应用。ASP.NET Core是一个开源、跨平台的框架,具有依赖注入、配置管理等特性。文章详细介绍了项目结构规划、依赖注入配置、中间件使用及性能优化方法,并讨论了安全性、可扩展性以及容器化的重要性。通过这些技术要点,开发者能够快速构建出符合现代Web应用需求的应用程序。
30 0
|
17天前
|
缓存 数据库连接 API
Entity Framework Core——.NET 领域的 ORM 利器,深度剖析其最佳实践之路
【8月更文挑战第28天】在软件开发领域,高效的数据访问与管理至关重要。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)工具,在 .NET 开发中扮演着重要角色。本文通过在线书店应用案例,展示了 EF Core 的核心特性和优势。我们定义了 `Book` 实体类及其属性,并通过 `BookStoreContext` 数据库上下文配置了数据库连接。EF Core 提供了简洁的 API,支持数据的查询、插入、更新和删除操作。
36 0
|
21天前
|
开发框架 监控 .NET
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
|
JSON 中间件 数据格式
.NET Core使用Source Link提高源代码调试体验和生产效率
.NET Core使用Source Link提高源代码调试体验和生产效率
133 0
.NET Core使用Source Link提高源代码调试体验和生产效率
|
缓存
. net 源代码调试
对于 .net framework 中的代码,光拿 Reflector 看是不够过瘾的,如果能够调试进去就好了! 其实,微软是提供了一套 sourcecode 的下载的: http://referencesource.microsoft.com/netframework.aspx 下载后运行安装文件把 source 和 symbols 安装到本地,这没啥好说的。
882 0
|
7天前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
20 7
|
5天前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
16 0
|
29天前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
29 0