河南做酒店网络系统网站wordpress 大学主题

pingmian/2026/1/23 20:48:49/文章来源:
河南做酒店网络系统网站,wordpress 大学主题,.net网站开发流程,营销型网站建设深圳.net core 中的经典设计模式的应用Intro前段时间我们介绍了23种设计模式#xff0c;今天来分享一下 .net core 源码中我觉得比较典型的设计模式的应用实例责任链模式asp.net core 中间件的设计就是责任链模式的应用和变形#xff0c;每个中间件根据需要处理请求#xff0c;并… .net core 中的经典设计模式的应用Intro前段时间我们介绍了23种设计模式今天来分享一下 .net core 源码中我觉得比较典型的设计模式的应用实例责任链模式asp.net core 中间件的设计就是责任链模式的应用和变形每个中间件根据需要处理请求并且可以根据请求信息自己决定是否传递给下一个中间件我也受此启发封装了一个 PipelineBuilder 可以轻松构建中间件模式代码可以参考这篇文章 https://www.cnblogs.com/weihanli/p/12700006.html中间件示例app.UseStaticFiles();app.UseResponseCaching(); app.UseResponseCompression();app.UseRouting();app.UseCors(builder builder.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());app.UseAuthentication(); app.UseAuthorization();app.UseEndpoints(endpoints {endpoints.MapControllers();endpoints.MapControllerRoute(name: areaRoute, {area:exists}/{controllerHome}/{actionIndex});endpoints.MapDefaultControllerRoute(); }); PipelineBuilder 实际示例var requestContext new RequestContext() {RequesterName Kangkang,Hour 12, };var builder PipelineBuilder.CreateRequestContext(context {Console.WriteLine(${context.RequesterName} {context.Hour}h apply failed);}).Use((context, next) {if (context.Hour 2){Console.WriteLine(pass 1);}else{next();}}).Use((context, next) {if (context.Hour 4){Console.WriteLine(pass 2);}else{next();}}).Use((context, next) {if (context.Hour 6){Console.WriteLine(pass 3);}else{next();}}); var requestPipeline builder.Build(); foreach (var i in Enumerable.Range(1, 8)) {Console.WriteLine();Console.WriteLine($--------- h:{i} apply Pipeline------------------);requestContext.Hour i;requestPipeline.Invoke(requestContext);Console.WriteLine(----------------------------);Console.WriteLine(); } 建造者模式asp.net core 中的各种 Builder HostBuilder/ConfigurationBuilder 等这些 Builder 大多既是 Builder 又是 DirectorBuilder 本身知道如何构建最终的 Product(Host/Configuration)var host new HostBuilder().ConfigureAppConfiguration(builder {// 注册配置builder.AddInMemoryCollection(new Dictionarystring, string(){{UserName, Alice}}).AddJsonFile(appsettings.json);}).ConfigureServices((context, services) {// 注册自定义服务services.AddSingletonIIdGenerator, GuidIdGenerator();services.AddTransientIService, Service();if (context.Configuration.GetAppSettingbool(XxxEnabled)){services.AddSingletonIUserIdProvider, EnvironmentUserIdProvider();}}).Build(); 工厂模式依赖注入框架中有着大量的工厂模式的代码注册服务的时候我们可以通过一个工厂方法委托来获取服务实例依赖注入的本质就是将对象的创建交给 IOC 容器来处理所以其实 IOC 容器本质就是一个工厂从 IOC 中获取服务实例的过程就是工厂创建对象的过程只是会根据服务的生命周期来决定是创建新对象还是返回已有对象。services.AddSingleton(sp new Svc2(sp.GetRequiredServiceISvc1(), xx)); 单例模式在 dotnet 中有一个 TimeQueue 的类型纯正的饿汉模式的单例模式代码class TimerQueue {#region singleton pattern implementation// The one-and-only TimerQueue for the AppDomain.static TimerQueue s_queue new TimerQueue();public static TimerQueue Instance{get { return s_queue; }}private TimerQueue(){// empty private constructor to ensure we remain a singleton.}#endregion// ... } https://referencesource.microsoft.com/#mscorlib/system/threading/timer.cs,49在 dotnet 源码中还有一些懒汉式的单例模式使用 Interlocked 原子操作internal class SimpleEventTypesT: TraceLoggingEventTypes {private static SimpleEventTypesT instance;internal readonly TraceLoggingTypeInfoT typeInfo;private SimpleEventTypes(TraceLoggingTypeInfoT typeInfo): base(typeInfo.Name,typeInfo.Tags,new TraceLoggingTypeInfo[] { typeInfo }){this.typeInfo typeInfo;}public static SimpleEventTypesT Instance{get { return instance ?? InitInstance(); }}private static SimpleEventTypesT InitInstance(){var newInstance new SimpleEventTypesT(TraceLoggingTypeInfoT.Instance);Interlocked.CompareExchange(ref instance, newInstance, null);return instance;} } 另外一个示例,需要注意下面这种方式不能严格的保证只会产生一个实例在并发较高的情况下可能不是同一个实例这也可以算是工厂模式的一个示例static internal class ConfigurationManagerHelperFactory {private const string ConfigurationManagerHelperTypeString System.Configuration.Internal.ConfigurationManagerHelper, AssemblyRef.System;static private volatile IConfigurationManagerHelper s_instance;static internal IConfigurationManagerHelper Instance {get {if (s_instance null) {s_instance CreateConfigurationManagerHelper();}return s_instance;}}[ReflectionPermission(SecurityAction.Assert, Flags ReflectionPermissionFlag.MemberAccess)][SuppressMessage(Microsoft.Security, CA2106:SecureAsserts, Justification Hard-coded to create an instance of a specific type.)]private static IConfigurationManagerHelper CreateConfigurationManagerHelper() {return TypeUtil.CreateInstanceIConfigurationManagerHelper(ConfigurationManagerHelperTypeString);} } 原型模式dotnet 中有两个数据结构 Stack/Queue 这两个数据都实现了 ICloneable 接口内部实现了深复制 来看 Stack 的 Clone 方法实现public virtual Object Clone() {Contract.Ensures(Contract.ResultObject() ! null);Stack s new Stack(_size);s._size _size;Array.Copy(_array, 0, s._array, 0, _size);s._version _version;return s; } 详细可以参考https://referencesource.microsoft.com/#mscorlib/system/collections/stack.cs,6acda10c5f8b128e享元模式string intern(字符串池)以及 Array.Emptyint()/Array.Emptystring() 等策略模式asp.net core 中的认证和授权我觉得就是策略模式的应用在使用 [Authorize] 的时候会使用默认的 policy也可以指定要使用的策略 [Authorize(Policy1)] 这样就会使用另外一种策略 Policy1policy 还是比较简单的policy 是用来根据用户的认证信息来控制授权访问的而认证则是根据当前上下文请求上下文、线程上下文、环境上下文等的信息进行认证从而获取用户信息的过程而不同的认证模式Cookie/JWT/自定义Token等其实是不同的处理方法也就是策略模式中不同的算法实现指定哪种认证模式就是使用哪种算法实现来获取用户信息观察者模式常使用事件(event)进行解耦外部代码通过订阅事件来解耦实现对内部状态的观察在 Process 类中有很多事件可以用来捕获另一个进程中的输出错误等public event DataReceivedEventHandler OutputDataReceived;public event DataReceivedEventHandler ErrorDataReceived; 通常这两个事件我们就可以获取到另外一个进程中的输出信息除此之外还有很多的类在使用事件相信你也用过很多组合模式WPF、WinForm 中都有控件的概念这些控件的设计属于是组合模式的应用所有的控件都会继承于某一个共同的基类, 使得单个对象和组合对象都可以看作是他们共同的基类对象迭代器模式c# 中定义了迭代器模式原始定义// 聚集抽象 public interface IEnumerable {/// summaryReturns an enumerator that iterates through a collection./summary/// returnsAn see crefT:System.Collections.IEnumerator / object that can be used to iterate through the collection./returnsIEnumerator GetEnumerator(); }// 迭代器抽象 public interface IEnumerator {/// summaryAdvances the enumerator to the next element of the collection./summary/// returns/// see langwordtrue / if the enumerator was successfully advanced to the next element; see langwordfalse / if the enumerator has passed the end of the collection./returns/// exception crefT:System.InvalidOperationExceptionThe collection was modified after the enumerator was created./exceptionbool MoveNext();/// summaryGets the element in the collection at the current position of the enumerator./summary/// returnsThe element in the collection at the current position of the enumerator./returnsobject Current { get; }/// summarySets the enumerator to its initial position, which is before the first element in the collection./summary/// exception crefT:System.InvalidOperationExceptionThe collection was modified after the enumerator was created./exceptionvoid Reset(); } Array 和 List 各自实现了自己的迭代器感兴趣可以去看下源码More.net core 中的设计模式应用还有很多不仅上面提到的这几个模式也不仅仅是我所提到的这几个地方上面有一些示例是直接用的 dotnet framework 中的源码因为有很多代码都是类似的用的 https://referencesource.microsoft.com 的源码以上均是个人理解如果有错误还望指出十分感谢欢迎补充更多设计模式应用的源码实例Referencehttps://github.com/dotnet/aspnetcorehttps://github.com/dotnet/extensionshttps://github.com/dotnet/corefxhttps://github.com/dotnet/aspnetcorehttps://github.com/dotnet/runtime

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深圳网站优化最好的方法天津软件设计公司

3.1 开普勒轨道根数 轨道根数描述 轨道大小 半长轴a 常数 轨道形状 偏心率e 常数 轨道面方位 轨道倾角i和升交点赤经Ω 常数 轨道方位 近地点角距ω 常数 航天器在轨道中的位置 真近点角f 非均匀变化 平近点角M 均匀变化 纬度幅角ωf 非均匀变化 3.2 开普勒轨道根数与星下点轨迹…

佛山提供网站设计报价wordpress破解插件放心用吗

多线程入门 一、线程和进程 进程 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间和系统资源,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位&#xff1…

网站建设市场调研美术生十大最烂专业

项目编号: S 054 ,文末获取源码。 \color{red}{项目编号:S054,文末获取源码。} 项目编号:S054,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2…

宜昌网站建设开发费用怎样免费制作网页

在编程的世界中,流程控制是程序员运行的基础,流程控制决定了程序按照什么样的方式去执行,本节给大家介绍 Python 流程控制相关语法。 if 语句 if 语句表示如何发生什么样的条件,执行什么样的逻辑。 Python程序语言指定任何非0和…

珠海 网站建设和推广it外包 北京

Gitleaks - 一款高效的Github仓库敏感信息泄露查询工具 1.工具概述2.安装3.参数解析4.使用1.工具概述 Gitleaks 是一种 SAST 工具,用于检测和防止 git 存储库中的硬编码机密,如密码、API 密钥和令牌 Gitleaks 是一个开源工具,用于检测和防止签入 Git 存储库的机密(密码/A…

石家庄做网站的公司书店网站模板下载

查看原文:http://blog.csdn.net/u0108184... Gradle实战系列文章:《Gradle基本知识点与常用配置》《Gradle实战:Android多渠道打包方案汇总》《Gradle实战:不同编译类型的包同设备共存》《Gradle实战:执行sql操作hive…

成都网站创建厂房装修东莞网站建设

项目背景 原有的启动平台公共组件库comm-util的浏览器工具类BrowserUtils是基于UserAgentUtils的,但是该项目最后一个版本发布于 2018/01/24,之至今日23年底,已有5年没有维护更新,会造成最新版本的部分浏览器不能正确获取到浏览器…

福建省建建设行业信用评分网站网页建设方案怎么写

一、准备工作 kali和靶机都选择NAT模式(kali与靶机同网段) 1.靶场环境 下载链接:https://download.vulnhub.com/dc/DC-7.zip 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 (1&…

网站建设 项目书 框架中铁建设门户网站

01 卡片 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝有很多数字卡片,每张卡片上都是数字 0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个&a…

html5 微网站 源码简历模板电子版

"数据二十条"即中共中央、国务院关于构建数据基础制度更好发挥数据要素作用的意见,全文共分为五章二十条。 一、发布 2022年6月22日召开了中央全面深化改革委员会第二十六次会议。审议通过《关于构建数据基础制度更好发挥数据要素作用的意见》。 2022…

网站开发程序用什么好电商开发系统

1.1 1代精彩面板仅支持使用PPI电缆(RS232-PPI和USB-PPI)下载程序,操作步骤如下:使用PPI下载方式,组态电脑需要使用RS232/PPI电缆或USB/PPI电缆与面板相连。订货号分别如下:RS232/PPI电缆:6ES7901-3CB30-0XA0USB/PPI电缆…

可以做链接的网站关于网站项目建设的申请

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力 目录 1.前言 2.堆排序 2.1降序排序 2.2时间复杂…

建设高端网站公司的目的网站的推广是怎么做的

代码随想录二刷 | 字符串 |重复的子字符串 题目描述解题思路 & 代码实现移动匹配KMP算法 题目描述 459.重复的子字符串 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: tru…

公司做网站要花多少钱平顺网站建设

错误的原因是:缺少servlet-api.jar这个包,将这个包导入项目里面就可以了。1. 我们可以到tomcat的lib目录下面找到这个包,然后在eclipse中,右击项目,2. 选择Java Build Path>Libraries>Add ExternalJARS,找到你计…

做购彩网站是怎么盈利的工作人员回应游客扔免费午餐

115.派大星的烦恼 解压下载文件时一个 bmp 文件,用notepad 打开有没有发现什么 ,提示位图什么的 用Stegsolve.jar 打开 发现很多. 和- 第一时间想到了 电报码 但提示不是电报码,除了这个那就是很像二进制了 0,1 什么的,但这个感觉…

关于网站开发所需的知识优化电池充电什么意思

myeclipse的安装就不说了,百度一下都有很多教程 但是发现现在网上很少有介绍这个软件具体如何使用,哪个组件有何用处并没有太多解释 因此讲解一下myeclipse的使用: 1.工作区【workspace】 1.当myeclipse打开后,大多数会…

文山州中小企业网站建设河北住房和城乡建设厅

Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 Hello大家好,我是python学习者小杨同学,上次跟大家分享关于python的数值类型和序列类型,…

广州番禺网站制作推广建立企业网站的详细步骤

2分钟搭建企业轻量级负载均衡服务器 文章目录1. 修改配置文件2. tomcat启动参数:3. 统一编码格式1. 修改配置文件 打开IntelliJ IDEA本地安装目录中bin文件夹下的idea.exe.vmoptions和idea64.exe.vmoptions这两个文件 分别在这两个文件内容的末尾添加:…

wordpress toggle 插件给网站做优化怎么做

Spring基础 - SpringMVC请求流程和案例 什么是MVC 用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理…