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"; }