当前位置: 首页 > news >正文

成都网站优化最低价湖州网站建设公司哪家好

成都网站优化最低价,湖州网站建设公司哪家好,微网站的搭建,h5类作品是什么意思让 .NET 轻松构建中间件模式代码Intro在 asp.net core 中中间件的设计令人叹为观止#xff0c;如此高大上的设计何不集成到自己的代码里呢。于是就有了封装了一个简单通用的中间件模板的想法#xff0c;以后有需要的时候就可以拿来即用。接口定义这里按执行的委托是同步还是异… 让 .NET 轻松构建中间件模式代码Intro在 asp.net core 中中间件的设计令人叹为观止如此高大上的设计何不集成到自己的代码里呢。于是就有了封装了一个简单通用的中间件模板的想法以后有需要的时候就可以拿来即用。接口定义这里按执行的委托是同步还是异步分为了同步和异步两种构建方法//没有返回值的同步中间件构建器 public interface IPipelineBuilderTContext {IPipelineBuilderTContext Use(FuncActionTContext, ActionTContext middleware);ActionTContext Build(); } // 异步中间件构建器 public interface IAsyncPipelineBuilderTContext {IAsyncPipelineBuilderTContext Use(FuncFuncTContext, Task, FuncTContext, Task middleware);FuncTContext, Task Build(); } 为了方便使用定义一下扩展方法使得可以像 asp.net core 中 app.Use(FunHttpContext,FuncTask,Task) 一样比较方便的使用扩展方法定义如下public static IPipelineBuilderTContext UseTContext(this IPipelineBuilderTContext builder, ActionTContext, Action action) {return builder.Use(next context {action(context, () next(context));}); } public static IAsyncPipelineBuilderTContext UseTContext(this IAsyncPipelineBuilderTContext builder, FuncTContext, FuncTask, Task func) {return builder.Use(next context {return func(context, () next(context));}); } 为了方便创建对应的 PipelineBuilder 这里定义了两个方法使用 Create 方法就可以创建一个 IPipelineBuilder 使用 CreateAsync 就可以创建一个 IAsyncPipelineBuilderpublic class PipelineBuilder {public static IPipelineBuilderTContext CreateTContext(ActionTContext completeAction){return new PipelineBuilderTContext(completeAction);}public static IAsyncPipelineBuilderTContext CreateAsyncTContext(FuncTContext, Task completeFunc){return new AsyncPipelineBuilderTContext(completeFunc);} } 使用示例来看一个使用示例这里的示例修改自设计模式里的责任链模式的一个示例废话不说来看代码这是一个请假的示例不同的请假时间交由不同的审批主管进行审批最后模拟了从请假1小时到请假8小时的申请处理情况private class RequestContext {public string RequesterName { get; set; }public int Hour { get; set; } } public static void Test() {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();} } public static async Task AsyncPipelineBuilderTest() {var requestContext new RequestContext(){RequesterName Michael,Hour 12,};var builder PipelineBuilder.CreateAsyncRequestContext(context {Console.WriteLine(${context.RequesterName} {context.Hour}h apply failed);return Task.CompletedTask;}).Use(async (context, next) {if (context.Hour 2){Console.WriteLine(pass 1);}else{await next();}}).Use(async (context, next) {if (context.Hour 4){Console.WriteLine(pass 2);}else{await next();}}).Use(async (context, next) {if (context.Hour 6){Console.WriteLine(pass 3);}else{await next();}});var requestPipeline builder.Build();foreach (var i in Enumerable.Range(1, 8)){Console.WriteLine($--------- h:{i} apply AsyncPipeline------------------);requestContext.Hour i;await requestPipeline.Invoke(requestContext);Console.WriteLine(----------------------------);} } 运行效果实现代码internal class PipelineBuilderTContext : IPipelineBuilderTContext {private readonly ActionTContext _completeFunc;private readonly IListFuncActionTContext, ActionTContext _pipelines new ListFuncActionTContext, ActionTContext();public PipelineBuilder(ActionTContext completeFunc){_completeFunc completeFunc;}public IPipelineBuilderTContext Use(FuncActionTContext, ActionTContext middleware){_pipelines.Add(middleware);return this;}public ActionTContext Build(){var request _completeFunc;foreach (var pipeline in _pipelines.Reverse()){request pipeline(request);}return request;} } internal class AsyncPipelineBuilderTContext : IAsyncPipelineBuilderTContext {private readonly FuncTContext, Task _completeFunc;private readonly IListFuncFuncTContext, Task, FuncTContext, Task _pipelines new ListFuncFuncTContext, Task, FuncTContext, Task();public AsyncPipelineBuilder(FuncTContext, Task completeFunc){_completeFunc completeFunc;}public IAsyncPipelineBuilderTContext Use(FuncFuncTContext, Task, FuncTContext, Task middleware){_pipelines.Add(middleware);return this;}public FuncTContext, Task Build(){var request _completeFunc;foreach (var pipeline in _pipelines.Reverse()){request pipeline(request);}return request;} } Referencehttps://github.com/WeihanLi/WeihanLi.Common/blob/dev/samples/DotNetCoreSample/PipelineTest.cshttps://github.com/WeihanLi/WeihanLi.Common/blob/dev/src/WeihanLi.Common/Helpers/Pipelines/PipelineBuilder.cshttps://github.com/dotnet/aspnetcore/blob/master/src/Http/Http/src/Builder/ApplicationBuilder.cs
http://www.zqtcl.cn/news/597423/

相关文章:

  • 河南民基建设工程有限公司网站齐齐哈尔建设局网站首页
  • 响应式网站建设推荐乐云践新三丰云免费云服务器
  • 长沙网站建设模板uc浏览器访问网站
  • 擼擼擼做最好的导航网站陕西政务服务网注册公司流程
  • 怎样做商城网站的推广wordpress用php哪个版本好
  • 网站功能模块建设建设网站考证
  • 网站代码结构成都住建局官网报名入口
  • 吴桥县网站建设房产门户网站模板
  • 标签化网站网络服务类型及其所采用的网络协议
  • 做网站服务器应该怎么配置网页美工设计实践性教案
  • 响应式网站导航栏内容泰安网站营销推广
  • 南通营销网站开发软件开发工具名词解释
  • 吉林企业网站模板建站哪个好wordpress后台新建慢
  • 整合营销的成功案例肇庆seo优化
  • 网站关键字标签合肥高端网站建设设计公司哪家好
  • 大型企业网站设计案例免费在线看片
  • 云南网站开发公司找哪家网站弹出式链接后台怎么做
  • 电商网站的支付模块怎么做企业网站建设招标文件
  • 旅游在线网站开发十八个免费的舆情网站
  • 网站怎么申请百度小程序火车头采集发布wordpress
  • 外贸网站的推广技巧有哪些莱芜网吧
  • 溧阳城乡建设局网站ps中网站页面做多大的
  • sns社交网站 有哪些wordpress开发分类筛选
  • 黄石网站建设教程网上怎样查询企业资质
  • 国内设计师交流网站怎样做自己的网站钻钱
  • 无锡专业网站推广网络营销组合策略
  • 网站建设的安全威胁中国建设银行的网站色彩
  • 中小型企业网站建设与管理潍坊做网站哪家公司最好
  • 广州白云机场网站建设免费的网站模版
  • 商务网站建设策划书51网站怎么打开