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

本文详细展示了如何在ASP.NETCore中通过构造函数注入、直接使用和方法参数注入服务,以增强代码的可扩展性和测试性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

前言:什么是依赖注入

依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值