不少刚学习.net core朋友对中间件的概念一直分不清楚,到底StartUp下的Configure方法是在做什么?

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  if (env.IsDevelopment())
{
  app.UseDeveloperExceptionPage();
}   app.UseMvc();  
}

  大家都说每个request进来都会对Configure方法中的中间件执行一遍,但通过调试发现,只有程序在启动时才会执行这段代码,过后的每次请求并不会进入

  下面给大家简单解释一下:

  假设有3个方法A B C,都有自己的业务逻辑,且参数类型与返回值类型相同

  public Task MethodA(HttpContext context);
  public Task MethodB(HttpContext context);
  public Task MethodC(HttpContext context);

  这个时候假设我通过某种手段将C方法放进B方法变成方法BC,类似:

  

public Task MethodBC(HttpContext context)

{

  //方法B原先逻辑

  return MethodC(context);

}

  同理将方法BC放进方法A变成方法ABC:

  

public Task MethodABC(HttpContext context)

{

  //方法A原先逻辑

  return MethodBC(context);

}
展开后:
public Task MethodABC(HttpContext context) {   //方法A原先逻辑   //方法B原先逻辑 return MethodC(context);
}

  将原本互不干执的3个方法揉进一个方法中,当服务器接收到请求时,封装好上下文丢进这个聚合方法

  换个思路,感觉观察者模式会不会更简单些,IServer中写个事件,有需要往里面注册就好了

  那怎么才可以将方法当个参数一样使用呢,自然是委托,下面官方的声明:

  中间件中最基础的组件,以HttpContext为参数,Task作为返回值

delegate Task RequestDelegate(HttpContext context);

  

  中间件的基本实现原理:

  public RequestDelegate Use(RequestDelegate @delegate)

{

  return (context)=>

  {

    //一些逻辑
    return @delegate.Invoke(context);
  }; }

细细一想,是不是就是在@delegate前面加了一些逻辑后重新生成一个RequestDelegate返回

g

05-26 15:21