asp.net core中間件工做原理

  很多剛學習.net core朋友對中間件的概念一直分不清楚,到底StartUp下的Configure方法是在作什麼?服務器

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

  app.UseMvc();  
}

 

  你們都說每一個request進來都會對Configure方法中的中間件執行一遍,但經過調試發現,只有程序在啓動時纔會執行這段代碼,事後的每次請求並不會進入app

  下面給你們簡單解釋一下:學習

  假設有3個方法A B C,都有本身的業務邏輯,且參數類型與返回值類型相同ui

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

  這個時候假設我經過某種手段將C方法放進B方法變成方法BC,相似:spa

  

public Task MethodBC(HttpContext context)

{

  //方法B原先邏輯

  return MethodC(context);

}

  同理將方法BC放進方法A變成方法ABC:.net

  

public Task MethodABC(HttpContext context)

{

  //方法A原先邏輯

  return MethodBC(context);

}
展開後:
public Task MethodABC(HttpContext context)

{

  //方法A原先邏輯

  //方法B原先邏輯
    
    return MethodC(context);
}

 

  將本來互不幹執的3個方法揉進一個方法中,當服務器接收到請求時,封裝好上下文丟進這個聚合方法調試

  換個思路,感受觀察者模式會不會更簡單些,IServer中寫個事件,有須要往裏面註冊就行了code

 

  那怎麼才能夠將方法當個參數同樣使用呢,天然是委託,下面官方的聲明:中間件

  中間件中最基礎的組件,以HttpContext爲參數,Task做爲返回值blog

  delegate Task RequestDelegate(HttpContext context); 

  

  中間件的基本實現原理:

  public RequestDelegate Use(RequestDelegate @delegate)

{

  return (context)=>

  {

    //一些邏輯
    return @delegate.Invoke(context);
  };

}

細細一想,是否是就是在@delegate前面加了一些邏輯後從新生成一個RequestDelegate返回

g

相關文章
相關標籤/搜索