5min+:C# 一些类名的后缀及其意义

摘自痴者工良 whuanle 的博客
痴者工良 whuanle

NCC 的 5min+ 栏目由句幽和痴者工良等作者联合推出,是一个利用您的碎片化时间来学习和丰富计算机专业知识与 .NET 知识的博文系列,它所包含 .NET 体系中可能会涉及到的方方面面,如 C# 的小细节、ASP.NET Core、微服务等。

C# 中有常见的以以下名称为后缀的类型,笔者总结了一下大概用途。

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(s)

指工具类一般没有特殊意义,用于表示此类型用于完成某些辅助操作,例如一些转换、序列化,大多数情况下设置成静态类。

例如 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;
})

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值