ASP.NET Core基础之用扩展方法封装服务配置

news2024/9/25 2:29:45

阅读本文你的收获

  1. 了解C#中的扩展方法机制
  2. 学会在ASP.NET Core 中,用扩展方法封装服务配置,使得代码更加简洁

一、什么是扩展方法

扩展方法使能够向现有类型添加方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。

扩展方法的特点

扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。

如何定义扩展方法

它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。

例子:将字符串转换为Int

//EString类里有一个ToInt的静态方法,
//他接收一个自身参数this,类型为string,this string必须在方法参数的第一个位置
namespace WebApplication1.Extensions.StringEx
{
    public static class EString
    {
        ///<summary>
        ///将字符串转换为Int
        ///</summary>
        ///<paramname="t"></param>
        ///<returns>当转换失败时返回0</returns>  
        public static int ToInt(this string t)
        {
            int id;
            int.TryParse(t, out id); //这里当转换失败时返回的id为0 
            return id;
        }
    }
}
using WebApplication1.Extensions.StringEx;

//使用ToInt扩展方法
string str="123";
str.ToInt(); //编译时会转换成:EString.ToInt(str);

分析:string类型里面本身没有ToInt方法,通过扩展方法,给string类型扩展了一个ToInt()方法

二、实用案例:在ASP.NET Core当中封装Swagger的配置

开发环境:

操作系统: Windows 10 专业版
平台版本是:.NET 6
开发框架:ASP.NET Core WebApi
开发工具:Visual Studio 2022

首先,在没有用扩展方法封装前,Swagger的配置在Program.cs中如下:
在这里插入图片描述

思考一下:如果所有的服务配置都直接写在Program.cs中,那么势必会使得Program.cs代码变得很长,很乱。这样就会使得后期的维护越来越难。此时,我们可以使用扩展方法,将Swagger的配置封装到一个单独的类中,代码如下:

//在表现层里面,新建以下类,并写一个扩展方法SwaggerSetup
/// <summary>
/// Swagger配置 扩展方法
/// </summary>
public static class SwaggerExtensions
{
	/// <summary>
	/// 扩展方法
	/// </summary>
	/// <param name="services"></param>
	/// <returns></returns>
	public static IServiceCollection SwaggerSetup( this IServiceCollection services) 
	{
		services.AddSwaggerGen(opt =>
		{
			//swagger开发者信息
			opt.SwaggerDoc("v1", new OpenApiInfo
			{
				Title = "XF.OAWeb.WebApi",
				Version = "v1",
				Contact = new OpenApiContact
				{
					Name = "幸福科技",
					Email = "xftech@qq.com",
				}
			});

			//如何在Swagger上显示中文注释呢?
			//解决方法:读取XF.OAWeb.WebApi.xml文件里面的注释信息,显示在Swagger界面上
			string xmlPath = AppDomain.CurrentDomain.BaseDirectory + "XF.OAWeb.WebApi.xml";
			opt.IncludeXmlComments(xmlPath, true);
		});

		return services;
	}
}

//在Program.cs中,把上图中红色框内的代码,改成调用该扩展方法

builder.Services.SwaggerSetup();  //配置Swagger服务

看了本文,你也可以用扩展方法的机制,将各种服务配置单独封装成一个扩展方法,将这些扩展方法放到不同的cs文件中,并放置在一个Extensions文件夹中,方便管理。

如果本文对你有帮助的话,请点赞+评论+关注,或者转发给需要的朋友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1408650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go实现LRU算法

LRU是什么&#xff1f; LRU是内存淘汰策略&#xff0c;LRU &#xff08;Least recently used&#xff1a;最近最少使用&#xff09;算法在缓存写满的时候&#xff0c;会根据所有数据的访问记录&#xff0c;淘汰掉未来被访问几率最低的数据。也就是说该算法认为&#xff0c;最近…

惠普战66笔记本进PE系统无硬盘解决方法

1 问题描述 针对惠普战66笔记本&#xff0c;在使用优启通进行系统重装时&#xff0c;当进人 PE 系统后&#xff0c;看不到笔记本自带的固态硬盘&#xff0c;因而无法将系统重装到笔记本中。 现在&#xff0c;介绍一种方法&#xff0c;各位读者可以尝试&#xff0c;博主已经尝试…

自动化Web页面性能测试介绍

随着越来越多的用户使用移动设备访问 Web 应用&#xff0c;使得 Web 应用需要支持一些性能并不是很好的移动设备。为了度量和测试 Web 应用是不是在高复杂度的情况下&#xff0c;页面性能能满足用户的需求。 同时&#xff0c;随着 Web 应用的空前发展&#xff0c;前端业务逐渐…

伸向Markdown的黑手,知名博客平台曝出LFI漏洞

如果你至今依然在坚持写博客&#xff0c;在知乎或其他自媒体平台上发表文章&#xff0c;那你应该对Markdown很熟悉了。这是一种轻量级标记语言&#xff0c;借此可以用纯文本格式编写文档&#xff0c;并用简单的标记设置文档格式&#xff0c;随后即可轻松转换为具备精美排版的内…

红外热成像 ~ 基于matlab的非均匀校正code

红外芯片由于工艺问题存在严重的分均匀性&#xff0c;所以非均匀矫正一直是影响红外图像质量的第一因素。分均匀矫正的算法也是红外图像处理研究的重点区域&#xff0c;建立了一些矫正的方式方法。其中最常用最简单的就应该算是两点温度定标算法。 应用两点法校正有两个前提条…

openresty 安装, nginx与 openresty

openresty VS nginx Nginx 是一款高性能的 Web 服务器和反向代理服务器&#xff0c;具备基础的功能如HTTP服务、负载均衡、反向代理以及动静分离等。它是许多互联网应用的核心组件&#xff0c;因其模块化和可扩展的设计而受到欢迎。1 OpenResty 是基于 Nginx 的 Web 平台&…

Spring如何使用自定义注解来实现自动管理事务?

人可以做他(她)想做的&#xff0c;但不能要他(她)想要的 一个目录 前言业务代码展示手动挡自动挡事务失效的问题代码地址 前言 在两年半以前&#xff0c;我写了一篇博客&#xff1a;框架的灵魂之注解基础篇&#xff1a; 在那篇博客的结尾&#xff0c;我埋了一个坑&#xff1a…

写点东西《检查和更新NPM包》

写点东西《检查和更新NPM包》 检查和更新 NPM 包 TL;DR&#xff1b; 用于检查和更新软件包的 NPM 命令# [](#npm-outdated)npm outdatednpm updatenpm update --save-dev --savenpm update -g npm-check-updates 检查和更新软件包的命令npm install -g npm-check-updatesnpx np…

SQL 系列教程(二)

目录 SQL DELETE 语句 DELETE 语句 演示数据库 DELETE 实例 删除所有行 SQL TOP, LIMIT, ROWNUM 子句 TOP 子句 演示数据库 SQL TOP、LIMIT 和 ROWNUM 示例 SQL TOP PERCENT 实例 添加WHERE子句 SQL MIN() 和 MAX() 函数 MIN() 和 MAX() 函数 演示数据库 MIN() …

ASUS华硕无畏Pro15笔记本电脑(M6500QB,M6500QH)工厂模式原厂OEM预装Windows11.22H2系统 含Recovery恢复

原装出厂Windows11系统适用于华硕无畏15笔记本电脑型号&#xff1a;M6500QB和M6500QH 链接&#xff1a;https://pan.baidu.com/s/1AVGLN6-ILIRogOMj48Mk1w?pwdmi7d 提取码&#xff1a;mi7d 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题专用壁纸、系统属性联机支持…

千兆以太网测试仪可以做什么

网络性能测试仪是一种用于测量和监测网络质量的工具。它可以帮助用户评估网络的性能&#xff0c;包括带宽、延迟、丢包率等指标&#xff0c;并及时发现网络故障&#xff0c;以保证网络的高效运行。网络性能测试仪可以应用于多个领域&#xff0c;如网络运营商、企业网络、数据中…

鸿蒙开发案列一

1、开发需求 案例app一打开是“Hello world” 界面&#xff0c;开发者点击“Hello world”变成“Hello ArkUI”’ 2、源代码 Entry Component struct Hello {State person_name: string Worldbuild() {Row() {Column() {Text(Hello this.person_name).fontSize(50).fontWei…

linux安装docker--更具官网教程

1.访问https://docs.docker.com/ 2.进入download 3输入cento 或者直接访问地址Install Docker Engine on CentOS | Docker Docs 4一步一步根据官网命令走 2安装 3 4 方式一&#xff1a; service docker start&#xff08;开启&#xff09; service docker status&#xff08…

《游戏-03_3D-开发》之—新输入系统人物移动攻击连击

本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;请先保存项目&#xff0c; 点击加号起名为MyCtrl&#xff0c; 点击加号设置为一轴的&#xff0c; 继续设置W键&#xff0c; 保存 生成自动脚本&#xff0c; 修改MyPlayer代码&#xff1a; using UnityEngine;…

单核QPS近6000S,陌陌基于OceanBase的持久化缓存探索与实践

挚文集团于 2011 年 8 月推出了陌陌&#xff0c;这款立足地理位置服务的开放式移动视频社交应用在中国社交平台领域内独树一帜。陌陌和探探作为陌生人社交领域的主流应用&#xff0c;涵盖了多种核心业务模块&#xff0c;包括直播服务、附近动态功能、即时通讯&#xff08;IM&am…

【脑电信号处理与特征提取】P2-夏晓磊:脑电的神经起源与测量

夏晓磊&#xff1a;脑电的神经起源与测量 专业术语 electroencephalography(EEG) 脑电图 Excitatory Postsynaptic Potential(EPSP) 兴奋性突触后电位 Electrocorticography(ECoG) 皮层脑电图 什么是脑电/脑电图&#xff08;EEG&#xff09;&#xff1f; Electroencephalograp…

STM32F407移植OpenHarmony笔记1

参考文档&#xff1a; OpenAtom OpenHarmonywidthdevice-width,initial-scale1.0https://docs.openharmony.cn/pages/v3.2/zh-cn/device-dev/get-code/gettools-acquire.md/ 搭建环境 安装linux系统: Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-91-generic x86_64) 下载源代码&a…

鸿蒙自定义Video播放器

前言 DevEco Studio版本&#xff1a;4.0.0.600 使用效果 如何使用 参考文档&#xff1a;OpenHarmony Video使用说明 1、module创建 File-->New-->Module&#xff0c;选择Static Library 2、相关类创建 PlayControl&#xff1a;视频播放控制类 PlayProgress&#xf…

淘宝扭蛋机小程序开发:从创意到实现

一、引言 近年来&#xff0c;随着移动互联网的快速发展&#xff0c;小程序已成为商家与消费者互动的重要平台。其中&#xff0c;扭蛋机小程序以其独特的互动性和趣味性&#xff0c;受到了广泛的欢迎。本文将详细介绍淘宝扭蛋机小程序的开发过程&#xff0c;包括创意产生、需求…

OSPF-(LSA+SPF)

Router LSA使用Link来承载路由器直连接口的信息。 Link Type&#xff1a;P2P&#xff0c;TransNet&#xff0c;StubNet。 Point-to-Point&#xff08;P2P&#xff09;&#xff1a;描述一个从本路由器到邻居路由器之间的点到点链路&#xff1b;属于网段信息&#xff1b; StubN…