4:服务注册和管道

视频地址 :https://www.bilibili.com/video/av38392956/?p=3

1:上次说到,我们从配置文件/配置源里取得Hello Word的信息,现在呢我们换个方式写,写一个服务叫IWelcomeService,并且假设有getMessage这么一个方法,那么无论是哪个对象或者服务,实现了这个接口,我们就可以从实现了该接口的对象或者服务里来获取这个信息

   1.1:创建接口

  1.2:创建一个类,这个类要实现该接口

  1.3:配置完后,我们F5运行,会发现有个错误,他说:无法找到一个实现了IWelcomeService接口的服务,所以说我们需要在ASP.NET Core项目里来注册一个服务,对应这个IWelcomeService

  1.4:这两个接口对应的服务已经注册完了,是ASP.NET Core默认配置就已经注册完了,但IWelcomeService是我们自己定义的接口,还没有进行注册,所以说我们需要针对这个接口来注册服务

  1.5:这个ConfigureServices方法就是用来注册服务的,就像下面这么写

    1.5.1:IWelcomeService是接口,WelcomeService是他对应的实现类;

    1.5.2:AddSingleton(单例模式)表示在整个web项目的声明周期里,最多只会出现一个WelcomeService的实例;

    1.5.3:还有两种其他的方式:AddTransient就是每次有其他的类或方法来请求IWelcomeService的时候,它都会建立一个新的WelcomeService实例;

 

    1.5.4:AddScoped就是每次Http请求,Web请求的时候,有一次Web请求他会生成一个WelcomeService实例,在这个Web请求期间,如果多次请求,它会使用同一个实例

  1.6:我们现在使用AddSingleton,这个时候再运行,就发现已经没有错误了


 

2:管道和中间件

  2.1:ASP.NET Core Web应用是如何处理Http请求的?

  2.2:假设有个http请求到达我们的应用之后,如下图有个POST请求,POST/后面是一个Product,创建一个产品,而我们的ASP.NET Core Web应用它就需要处理这个请求,在这个应用里,中间件就是干这个活的;

  2.3:中间件就决定着如何处理这个请求,并且其实这个中间件就是一个对象,每个中间件的角色和功能都不一样,而且每个中间件的功能都局限在特定的领域内,所以每个中间件都很小,只关注这一块功能,所以整个web应用将会使用很多中间件;

  2.4:分析一下下面的图:有个POST请求,首先这个Web应用可能要记录所有的Web请求,把里面的信息记录下来,或者是存到日志文件,日志数据库里,所以我们的应用可以考虑添加一个日志中间件Logger,Logger可以查看所有请求进来的信息,包括请求的路径,查询字符串,Header,Cookies,Access Token,Logger最重要的应该是记录信息,把请求的相关信息都记录下来,然年转给下一个中间件...(Logger可以拒绝这个请求,一旦拒绝请求,这个处理也就停止了)

  2.5:下一个中间件,我们可以考虑一个授权功能的中间件,这个中间件的工作原理-->首先会找一个固定的cookie的值或者是Access Token,如果授权中间件找到了,那么它就允许上面这个请求(POST/Product)在整个管道内继续前行,能到下一个中间件,如果没找到特定的cookie或Token,那么它可以返回一个错误代码401,或者把请求重定向登陆页面,这都是常见做法。假设在我们这里找到了,那么它就把请求带到了下一个中间件里...

  2.6::下一个中间件是一个路由中间件,这个中间件首先会看一下请求的URL(POST/Product),然后它的工作就是弄明白你想要调用哪个类的哪个方法,而这个方法可能返回JSON数据,也可能返回Html页面,而这个路由中间件的职责就是找遍整个应用,来找到那个可以响应这个请求的那个东西,如果路由中间件没有找到任何可以相应请求的东西,那么它就返回Http 404状态码;如果找到了,并且这个方法是返回JSON数据或者Html页面,这时整个管道的流程就开始原路返回,所以说管道是双向设计的;

  2.7:一个请求进入管道之后呢,它会按照程序里添加中间件的顺序依次先后经过这些中间件,如下图就是先Logger,再授权,最后路由;假设路由中间件产生了一个响应,那么响应在管道里就是原路返回,从路由这到授权,最后到Logger,响应就会离开我们的服务器,来到客户端,这些就是ASP.NET Core管道和中间件的本质,我们需要按照特定的顺序,设置不同功能的中间件,来组成我们Web应用的功能...(其他常用的中间件也有很多,包括处理异常的中间件,server静态文件的中间件,还有最重要的Mvc,把请求送到Mvc框架里,就需要使用Mvc中间件)

 

posted @ 2019-06-03 10:01  大北票  阅读(293)  评论(0编辑  收藏  举报