• C# 一些类名的后缀及其意义


    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 或 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";
        }
    
  • 相关阅读:
    PowerDesigner生成SQL的冒号设置
    Linux/Windows 一键获取当前目录及子目录下所有文件名脚本
    Target runtime jdk1.8.0_181 is not defined
    windows——任务计划程序
    12篇文章回顾总结
    《逆商》2月12日
    《终身成长》2月11日
    《心流》 什么才是真正的幸福
    《心流》 什么才是真正的幸福 2月7日
    《高效能人士的7个习惯》 2月3日
  • 原文地址:https://www.cnblogs.com/whuanle/p/12498128.html
Copyright © 2020-2023  润新知