阅读本文你的收获
- 了解C#中的扩展方法机制
- 学会在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文件夹中,方便管理。
如果本文对你有帮助的话,请点赞+评论+关注,或者转发给需要的朋友。