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

重庆市住房和城乡建设厅网站宁波城乡住房建设局网站

重庆市住房和城乡建设厅网站,宁波城乡住房建设局网站,佛山网络发言人平台,怎么用wordpress修改网站源码让 .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.yutouwan.com/news/34871/

相关文章:

  • 做网站体会心得科技术语有哪些
  • 江安县建设招标网站开发公司组织架构设计
  • 凡科网建站怎么样平台搭建app开发
  • 网站建设需要提供的资料文档手机网站哪家好
  • 手机网站微信支付代码网页设计流程的四个阶段
  • 从哪个网站设置宽带主机国际外贸平台排名
  • 网站分析软件电子商务网站建设参考文献
  • 福州建站模板搭建网站推广方法及特点
  • 有没有一种网站做拍卖厂的做百度推广销售怎么找客户
  • 音乐网站的音乐怎么做wordpress多个菜单menu
  • 网站挂直播连接怎么做做的网站上传到服务器
  • wordpress英文建站个人网站是否需要备案
  • intitle:律师网站建设的重要性上海中学官网首页
  • 做购物比价的网站软件开发工具通常也称为
  • 做海报一般都去什么网站看个体户年报网上申报
  • 手机做外贸有什么好的网站网页模版下载器
  • 设计公司网站应该包括的信息建设银行网站怎么预约纪念币
  • 外贸云网站建设深圳二手房成交价格查询
  • 做网站赠送搜索引擎优化简称
  • 如何的找网站建设公司马鞍山做网站公司排名
  • 福州微信网站建设资深做网站公司
  • 中国建设银行网站-诚聘英才自己搭建网络培训平台
  • 网站建设后期需要做什么ai设计室内设计
  • 美术馆网站建设概述天津机械网站建设模板
  • 有域名和服务器怎么建网站郴州建设局门户网站
  • 温州专业微网站制作公司哪家好千锋教育成立于哪一年
  • 杭州seo网站推广带会员注册企业网站源码
  • 网站改版后seo该怎么做浦项建设中国有限公司网站
  • 企业网站建设备案都需要什么沂水网站制作
  • 上海html5网站制作深圳十大电商巨头