从搞清楚Startup开始学习NetCore

通过各种百度的方式学习了netcore,见得最多的便是Startup.cs文件。

看见各种文章在Startup类里的Configure和ConfigureServices这两个方法里搞来搞去。

之前一直只是知道了ConfigureServices这个方法是干什么的,但是没太弄懂Configure方法是做什么的。今天做统一异常处理,使用到了中间件,就好像明白了。

记性差,记录一下。也希望能帮到初学netcore的胖友。

首先得有个host的概念。

我知道我从A类中想使用B类(非静态类)的method1。我需要先在A类实例化B类。然后用实例.method1即可以完成调用。

那浏览器一个请求,是如何到我的Controller里面的?netframework时期没想过这个问题。

接触netcore之后,看见了它

 

 

根据字面意思,创建宿主生成器(args).生成().运行()就大概理解了,netcore里面是创建了一个宿主,帮我们处理浏览器的请求。

浏览器的请求发出去,就是把请求递给了我们在netcore这个控制台应用程序中创建的宿主。

这个宿主会处理浏览器的请求。宿主会实例化这个请求所需要的Controller,并调用其中的方法。

一个简化后的请求流程就是,【浏览器发出请求】=》【宿主拿到请求】=》【宿主执行请求】=》【宿主给出响应】

那本来执行请求时,宿主除了实例化Controller,还会实例化controller中使用到的【其他类】。为了解耦,netcore默认使用ioc容器,并使用了依赖注入的方式传入了【其他类】的实例。

实例哪里来?

我的想法是,流程变成了【浏览器发出请求】=》【IOC拿到请求】=》【IOC将实例添加到请求中,并将请求转交给宿主】=》宿主执行请求】=》【宿主给出响应】

ConfigureServices

IOC拿到请求后,根据此方法中AddTransient、AddScoped、AddSingleton的类来生成实例。再将请求和实例转交给宿主。这样宿主在实例化controller的时候就能通过构造函数传入实例了。

 

那我希望宿主拿到请求的时候,不要直接就执行请求。先把这个请求打扁,或者判断这个请求是否合规,不合规不执行请求怎么做?

Configure

Configure方法内通过添加中间件的方式添加流程。比如添加身份验证流程就变成了

【浏览器发出请求】=》【IOC拿到请求】=》【IOC将实例添加到请求中,并将请求转交给宿主】=》【宿主验证请求】=》【宿主执行请求】=》【宿主给出响应】

 

posted @ 2020-01-09 16:31  Kevin_Ni  阅读(205)  评论(0编辑  收藏  举报