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

  • 一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性已关闭评论
  • 42 次浏览
  • A+
所属分类:.NET技术
摘要

依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,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; 		} 	} } 

我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎关注老杨的公众号(名称:代码掌控者),更多干货等你来

往期精彩

  1. C# 静态类,高手不想让你知道的 15 个真相
  2. 封装一个 C# 范围判断函数,从此告别重复编写范围判断代码的烦恼
  3. 用 C# Stopwatch 计时,让代码性能飞起来!
  4. 轻装上阵,Visual Studio LocalDB:.NET 程序员的本地数据库神器
  5. 封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼
  6. 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  7. 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结
  8. C# AutoMapper 10个常用方法总结
  9. C# 7个方法比较两个对象是否相等
  10. C# 去掉字符串最后一个字符的 4 种方法

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