C# 一些类名的后缀及其意义
C# 中有常见的以以下名称为后缀的类型,笔者总结了一下大概用途。
[TOC]
Extensions
此类型用于实现拓展函数,类名后加上
Extensions。
如下面的示例实现了拓展函数,就是我们平时使用的
app.UseAuthentication();。
public static class AuthAppBuilderExtensions { public static IApplicationBuilder UseAuthentication(this IApplicationBuilder app) { if (app == null) { throw new ArgumentNullException(nameof(app)); } return app.UseMiddleware<AuthenticationMiddleware>(); } }
Helper 或 Helpers
指工具类一般没有特殊意义,用于表示此类型用于完成某些辅助操作,例如一些转换、序列化,大多数情况下设置成静态类。
例如
Microsoft.AspNetCore.Cors.Infrastructure中处理 Uri 的工具类。
internal static class UriHelpers { public static bool IsSubdomainOf(Uri subdomain, Uri domain) { return subdomain.IsAbsoluteUri && domain.IsAbsoluteUri && subdomain.Scheme == domain.Scheme && subdomain.Port == domain.Port && subdomain.Host.EndsWith($".{domain.Host}", StringComparison.Ordinal); } }
Scheme
代表方案、种类或处理方式,一般使用在枚举或者指明是某种类型下使用,大多属于常量。 例如 ASP.NET Core 中,原来配置 Jwt 认证的代码如下
services.AddAuthentication(options=> { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) // Cookie CookieAuthenticationDefaults.AuthenticationScheme
Builder
此种类型的设计模式称为建造者模式,一般用于函数式编程链式调用生成某个类型。
作用是将构建一个复杂的对象的过程抽象出来,使用不同的过程构建对象的不同部件。
例如 StringBuilder 就是用于构建字符串的。另外 ASP.NET Core 中,IHost 的构建过程如下。
public static void Main(string[] args) { ConsoleToke(); var host = CreateHostBuilder(args).Build(); host.Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
Context
上下文,HTTP请求上下文,访问上下文,线程上下文等。
例如 EFCore 中的
DbContext,Http 请求中的
HttpContext,多线程中的
CurrentContext。
Factory
工厂模式, 作用是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
例如 ASP.NET Core 的注入服务中
private static ServiceProvider serviceProvider; public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); // ... // ... serviceProvider = services.BuildServiceProvider(); } // 获取任意实现了 TInterface 接口的实例 public TInterface GetAnyInterface<TInterface>() { return serviceProvider.GetService<TInterface>(); }
下面的代码中,可以动态实例化返回一个需要的类型。
public static Func<T> CreateFactory<T>(Type implementation) { return ((IActivator<T>)Activator.CreateInstance(typeof(AlgorithmActivatorCore<>).MakeGenericType(implementation))).Creator; }
Provider
提供者模式,微软发明~
这个我找了很久,在维基百科找到资料 https://en.wikipedia.org/wiki/Provider_model。
提供者模式的设计和规范,可以参考微软文档 https://docs.microsoft.com/en-us/previous-versions/dotnet/articles/ms972319(v=msdn.10)?redirectedfrom=MSDN
这里有练习实践教程 https://www.c-sharpcorner.com/uploadfile/webmaster3/provider-design-patterns-in-Asp-Net-2-0/
https://www.codemag.com/Article/0711081/The-Provider-Model
Options
原来当某种配置的模型类型。 例如 ASP.NET Core 中,记录 jwt 认证配置的类型。
public class JwtBearerOptions : AuthenticationSchemeOptions { public bool RequireHttpsMetadata { get; set; } = true; public string MetadataAddress { get; set; } public string Authority { get; set; } public string Audience { get; set; } ... ... }
Defaults
定义常量、默认值。
public static class JwtBearerDefaults { public const string AuthenticationScheme = "Bearer"; }
- [网摘]skyline 中一些扩展名及其意义(一)
- iOS中的一些资源文件及其意义
- 黑马程序员 关于C#中 文档的一些意义
- C#中String类型字符串内封装的一些方法及其使用情况
- C#面试的一些问题.
- 《CLR Via C#》 如何查看计算机是否安装了.NET Framework及其版本
- 对使用C#.Net的一些感想
- 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
- C#对excel一些基本操作
- C#中一些易混淆概念总结
- 总结C#中得到程序当前工作目录和执行目录的一些方法
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- c#中的 ref 与 out 区别及其用法
- 【原创】C# 递归获取指定目录的子目录及其所有文件
- IOC的简单实现及其意义.
- C# 浅谈泛型存在的意义
- (NEST)c#中使用ElarticSearch的一些语句
- 关于C#执行多个SQL语句的一些操作——Note on Dec. 19th
- C#中得到程序当前工作目录和执行目录的一些方法
- C#中一些字符串操作的常用用法