翼度科技»论坛 编程开发 .net 查看内容

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

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27

前言:什么是依赖注入

依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,ASP.NET Core 提供了内置的依赖注入容器,可以帮助我们轻松地将服务注册到容器中。
本文主要通过一个简单的例子来阐述 ASP.NET Core 依赖注入 的使用方式,我们通常在构造方法中注入,如果使用频率低,也可以通过方法参数直接注入到方法。
Step By Step 步骤


  • 创建一个 Asp.NET Core Web API 项目
  • 创建一个用于测试的服务类
    1. namespace 服务注入1;
    2. public class MyService1
    3. {
    4.         public IEnumerable<string> GetNames()
    5.         {
    6.                 return new string[] { "Tom", "Zack", "Jack" };
    7.         }
    8. }
    复制代码
  • 打开 Program.cs 编写注册此服务的代码
    1. using 服务注入1;
    2. var builder = WebApplication.CreateBuilder(args);
    3. // Add services to the container.
    4. builder.Services.AddControllers();
    5. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
    6. builder.Services.AddEndpointsApiExplorer();
    7. builder.Services.AddSwaggerGen();
    8. // 注册自定义的服务
    9. builder.Services.AddScoped<MyService1>();
    10. var app = builder.Build();
    11. // Configure the HTTP request pipeline.
    12. if (app.Environment.IsDevelopment())
    13. {
    14.         app.UseSwagger();
    15.         app.UseSwaggerUI();
    16. }
    17. app.UseHttpsRedirection();
    18. app.UseAuthorization();
    19. app.MapControllers();
    20. app.Run();
    复制代码
  • 在控制器中依赖注入方式使用此服务(重点看注释
    1. using Microsoft.AspNetCore.Mvc;
    2. using 服务注入1;
    3. namespace 服务注入1.Controllers
    4. {
    5.         [ApiController]
    6.         [Route("[controller]/[action]")]
    7.         public class WeatherForecastController : ControllerBase
    8.         {
    9.                 // 1.定义自定义服务
    10.                 private readonly MyService1 _myService1;
    11.                 private static readonly string[] Summaries = new[]
    12.                 {
    13.                         "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    14.                 };
    15.                 private readonly ILogger<WeatherForecastController> _logger;
    16.                 // 2.通过构造方法注入
    17.                 public WeatherForecastController(ILogger<WeatherForecastController> logger, MyService1 myService1)
    18.                 {
    19.                         _logger = logger;
    20.                         _myService1 = myService1;
    21.                 }
    22.                 [HttpGet(Name = "GetWeatherForecast")]
    23.                 public IEnumerable<WeatherForecast> Get()
    24.                 {
    25.                         return Enumerable.Range(1, 5).Select(index => new WeatherForecast
    26.                         {
    27.                                 Date = DateTime.Now.AddDays(index),
    28.                                 TemperatureC = Random.Shared.Next(-20, 55),
    29.                                 Summary = Summaries[Random.Shared.Next(Summaries.Length)]
    30.                         })
    31.                         .ToArray();
    32.                 }
    33.                 // 3.直接使用服务的方法
    34.                 [HttpGet]
    35.                 public string Test2(string name)
    36.                 {
    37.                         var names = _myService1.GetNames();
    38.                         return string.Join(",", names) + ",hello:" + name;
    39.                 }
    40.                 // 4.方法参数注入,用于使用频率比较低的服务
    41.                 // [FromServices] MyService1 _myService2
    42.                 // 只有 ASP.NET Core 的控制器类的操作方法才能用[FromServices]注入服务,普通的类是不支持这种写法的
    43.                 [HttpGet]
    44.                 public string Test([FromServices] MyService1 _myService2, string name)
    45.                 {
    46.                         // 直接使用服务的方法
    47.                         var names = _myService2.GetNames();
    48.                         return string.Join(",", names) + ",hello:" + name;
    49.                 }
    50.         }
    51. }
    复制代码
我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎关注老杨的公众号(名称:代码掌控者),更多干货等你来
往期精彩



来源:https://www.cnblogs.com/JackyGz/p/18521004
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具