asp.net core中間件工作原理


  不少剛學習.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM