c# Middleware impl
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Pactera.Bpm.TestProject.MiddlewareTest
{
[TestFixture]
public class TestMiddleware
{
[Test]
public void TestMiddlewareImpl()
{
var context = new HttpContext();
var builder = new AppBuilder();
builder.Use(next =>
{
return (ctx) =>
{
ctx.AddMessage("m1 invoke");
next(ctx);
};
});
builder.Use(next =>
{
return (ctx) =>
{
ctx.AddMessage("m2 invoke");
next(ctx);
};
});
//app.Use((ctx, next) =>
//{
// Console.WriteLine("m3 message:{0}", ctx.Message);
// ctx.Message = "Change by m3";
// next(ctx);
//});
var app = builder.Build();
app(context);
context.DisplayMessage();
}
}
public class HttpContext
{
private IList<string> _message = new List<string>();
public void AddMessage(string message)
{
_message.Add(message);
}
public void DisplayMessage()
{
foreach (var msg in _message)
{
Console.WriteLine(msg);
}
}
}
public delegate void HttpRequestTask(HttpContext context);
public class AppBuilder
{
private IList<Func<HttpRequestTask, HttpRequestTask>> middlewares = new List<Func<HttpRequestTask, HttpRequestTask>>();
public void Use(Func<HttpRequestTask, HttpRequestTask> middleware)
{
middlewares.Add(middleware);
}
//public void Use(Action<CustomeHttpContext, HttpTask> middleware)
//{
// var context = new CustomeHttpContext() { Message = "inner context" };
// middlewares.Add((ctx) =>
// {
// middleware(context, HandleRequest);
// return HandleRequest;
// });
//}
public void Run(Action<HttpContext> middleware)
{
//var context = new HttpContext() { Message = "inner context" };
//middleware(context);
}
public HttpRequestTask Build()
{
HttpRequestTask next = (ctx) =>
{
ctx.AddMessage("Start app 404");
};
var newmiddlewares = middlewares.Reverse<Func<HttpRequestTask, HttpRequestTask>>();
foreach (var middleware in newmiddlewares)
{
next = middleware(next);
}
return next;
}
}
}
c# Middleware impl的更多相关文章
- Python实现各类验证码识别
项目地址: https://github.com/kerlomz/captcha_trainer 编译版下载地址: https://github.com/kerlomz/captcha_trainer ...
- 用Middleware给ASP.NET Core Web API添加自己的授权验证
Web API,是一个能让前后端分离.解放前后端生产力的好东西.不过大部分公司应该都没能做到完全的前后端分离.API的实现方式有很 多,可以用ASP.NET Core.也可以用ASP.NET Web ...
- [转]Writing Custom Middleware in ASP.NET Core 1.0
本文转自:https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/ One of the new ...
- [转]用Middleware给ASP.NET Core Web API添加自己的授权验证
本文转自:http://www.cnblogs.com/catcher1994/p/6021046.html Web API,是一个能让前后端分离.解放前后端生产力的好东西.不过大部分公司应该都没能做 ...
- Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案
最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...
- [译]Writing Custom Middleware in ASP.NET Core 1.0
原文: https://www.exceptionnotfound.net/writing-custom-middleware-in-asp-net-core-1-0/ Middleware是ASP. ...
- 爬虫 htmlUnit遇到Cannot locate declared field class org.apache.http.impl.client.HttpClientBuilder.dnsResolve错误
当在使用htmlUnit时遇到无法定位org.apache.http.impl.client.HttpClientBuilder.dnsResolver类时,此时所需要的依赖包为: <depen ...
- 如何在android studio 1.0 启动时设置代理【解决WARN - ateSettings.impl.UpdateChecker - Connection failed.】
今天第一次用android studio,下了个比较新的1.0.1 linux版本,结果启动时老是出现以下错误: [ 6987] WARN - ateSettings.impl.UpdateCheck ...
- 使用静态函数impl模式做接口
使用静态函数impl模式做接口 impl即桥接模式,主要是为了隐藏数据和减少不必要的编译. 普通的impl模式做接口一般是: A类是接口,B类继承A类,是A类的实现,C类,包含A类和B类的头文件,把B ...
随机推荐
- JSON-RPC(jsonrpc4j)使用demo
服务端开发,在很多情况下,需要使用到RPC框架,今天发现一款很轻量的RPC框架--JSON-RPC.json rpc 是一种以json为消息格式的远程调用服务,它是一套允许运行在不同操作系统.不同环境 ...
- [2013-1-29] Air 安卓 天气预报源码
开源一个air android纯代码天气预报源码,未作优化~ ,仅供学习使用,勿作商用~ 花了两天时间,随便写了个天气预报 小应用 .纯代码,没有用组件,所以体积要小点.效率么...主要是没有去优 ...
- httpd结合php的fpm模式
httpd2.4版本的编译安装,不再赘述,查看上一篇:http://www.cnblogs.com/jsonhc/p/7134053.html 从官网下载php源码包:php-5.6.30.tar.b ...
- 20145312 《Java程序设计》第八周学习总结
20145312 <Java程序设计>第八周学习总结 学习笔记 Chapter 15时间与日期 15.1 日志 15.1.1 日志API简介 java.util.logging包提供了日志 ...
- 20135320赵瀚青LINUX第六周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 这周主要讲解的是进程. ...
- ubuntu下 gedit中文乱码
Gedit 3.x 版本设置 (适用于Ubuntu 11.10及以后) 命令方式 gsettings set org.gnome.gedit.preferences.encodings auto-de ...
- Linux 下 YUM 安装 PHP 5.5 (及5.6)
原文链接: http://blog.aboutc.net/linux/50/yum-install-php-on-linux 系统环境: CentOS 6.4 x86_64 Fedora 20 x86 ...
- Union 和Union all的区别
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All:对两个结果集进行并集操作,包括重复行,不进行排序: 例如: select employee_id,jo ...
- AD 域中给AD 用加登录本地计算的权限
说明:一般新添加的AD 用户没有登录计算机电脑的权限,如果需要添加登录权限. 步骤:1.打开Active Directory 用户和计算机 步骤:2.打开某个用户 步骤3; 如下图.
- VirtualBox 安装增强功能失败 解决方法
参考:virtualbox安装增强功能时[未能加载虚拟光盘] 在安装VirtualBox并配置虚拟机之后,想要安装增强功能:设备 => 安装增强功能. 出现未能加载虚拟光盘问题. 解决方法: 进 ...