首页 > 编程语言 >一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性

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

时间:2024-11-01 18:08:30浏览次数:4  
标签:Core string 可扩展性 app 可维护性 NET public 注入

Coding-3

前言:什么是依赖注入

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

image

标签:Core,string,可扩展性,app,可维护性,NET,public,注入
From: https://www.cnblogs.com/JackyGz/p/18521004

相关文章

  • 深入解析:JWT Bearer 认证在 .NET Core 中的应用
    在现代Web应用中,安全认证是确保用户数据和系统安全的重要一环。JSONWebToken(JWT)是一种流行的认证方式,它可以在客户端和服务端之间安全地传递信息。本文将详细介绍JWTBearer认证的概念、工作原理、在.NETCore中的实现步骤,以及最佳实践。一、什么是JWT?JSONWebTok......
  • 历史性突破:独立开发 .net core 在线客服系统累计处理聊天消息 48 万余条!
    业余时间用.netcore写了一个在线客服系统。我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免费和分享。后来我索性就发了一个100%私有化版直接给大家下载,方便大家自己部署。同时,为了方便暂时不想自己私有化部署的朋友使用,我免费搭......
  • 界面控件DevExpress JS & ASP.NET Core v24.1亮点 - 支持Angular 18
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中......
  • .Net C# 基于EFCore的DBFirst和CodeFirst
    DBFirst和CodeFirst1概念介绍1.1DBFirst(数据库优先)含义:这种模式是先创建数据库架构,包括表、视图、存储过程等数据库对象。然后通过实体框架(EntityFramework)等工具,根据已有的数据库结构来生成对应的实体类和数据访问代码。应用场景:当已经存在一个成熟的数据库,例如从旧......
  • UOS下配置.net core环境
    1.下载sdkhttps://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-8.0.403-linux-x64-binaries2.解压并拷贝到目标目录mkdir-p$HOME/dotnet&&tarzxfdotnet-sdk-8.0.403-linux-x64.tar.gz-C$HOME/dotnet3.安装geditsudoaptinstallgedit4.配置/etc/pro......
  • PVE 安装 Ubuntu Core
    一、下载UbuntuCore固件,并上传至PVE镜像存储区二、创建虚拟机1、新建虚拟机,名称填“ubuntu-core”, 2、操作系统选择不使用任何介质3、系统默认 4、磁盘选SATA总线,分配64G存储空间,其余选项默认 5、CPU分配单核双线程即可 6、内存分配2G......
  • PbootCMS提示:Undefined constant "core\basic\ISURL"
    要解决Undefinedconstant"core\basic\ISURL"的问题,可以在/core/basic/Url.php文件中定义ISURL常量。在文件顶部添加以下代码:define('ISURL',false);//或者根据需要设置为true完整代码如下:1<?php2/**3*@copyright(C)2016-2099HnaoyunInc.4*......
  • 管中窥豹----.NET Core到.NET 8 托管堆的变迁
    https://www.cnblogs.com/lmy5215006/p/18515971 在研究.NETString底层结构时,我所观察到的情况与《.NETCore底层入门》,《.NET内存管理宝典》书中描述不符。故多研究了一下。发现.NET托管堆的结构也是越来越多,越来越高性能。 //示例代码internalclassProgram{......
  • 推荐一个 ASP.NET Core 的轻量级插件框架
    前言本文将介绍一个专为ASP.NETCore设计的轻量级插件框架——PluginCore,该框架不仅能够简化插件的开发与集成,还能大幅提高开发效率。另外,还将简要介绍相关的前端技术和SDK支持,帮助我们快速上手。项目介绍PluginCore是一个轻量级插件框架,通过最小化的配置简化插件的集成与管理......
  • dotnet core微服务框架Jimu ~ 会员授权微服务
    提供授权服务,用户使用会员的用户名和密码获取token,带着token访问受保护的接口,如浏览和发布新闻。有2个公开的api:token:获取token;GetCurrentMemberInfo:获取当前token的会员信息;有1个不公开的方法:GetMemberInfo:根据会员用户名和密码,获取会员信息,该方法供......