一个简单的 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;
    }
  }
}


相关文章
|
8天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
30 5
|
21天前
|
开发框架 .NET 程序员
驾驭Autofac,ASP.NET WebApi实现依赖注入详细步骤总结
Autofac 是一个轻量级的依赖注入框架,专门为 .NET 应用程序量身定做,它就像是你代码中的 "魔法师",用它来管理对象的生命周期,让你的代码更加模块化、易于测试和维护
驾驭Autofac,ASP.NET WebApi实现依赖注入详细步骤总结
|
26天前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
38 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
16天前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
24 3
|
18天前
|
开发框架 .NET PHP
ASP.NET Web Pages - 添加 Razor 代码
ASP.NET Web Pages 使用 Razor 标记添加服务器端代码,支持 C# 和 Visual Basic。Razor 语法简洁易学,类似于 ASP 和 PHP。例如,在网页中加入 `@DateTime.Now` 可以实时显示当前时间。
|
JSON 中间件 数据格式
.NET Core使用Source Link提高源代码调试体验和生产效率
.NET Core使用Source Link提高源代码调试体验和生产效率
143 0
.NET Core使用Source Link提高源代码调试体验和生产效率
|
缓存
. net 源代码调试
对于 .net framework 中的代码,光拿 Reflector 看是不够过瘾的,如果能够调试进去就好了! 其实,微软是提供了一套 sourcecode 的下载的: http://referencesource.microsoft.com/netframework.aspx 下载后运行安装文件把 source 和 symbols 安装到本地,这没啥好说的。
900 0
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
48 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
75 0