ASP .NET Core

一、依赖注入

默认情况下ASP.NET Core项目会加载一个appsettings.json这个文件作为配置文件

说一下依赖注入
在这里插入图片描述

依赖注入是ASP.NET Core里一个不可分割的部分,而依赖注入的这个机制是依赖于IOC容器(IOC的中文意思:控制反转)

依赖注入原理应用

当我们的应用程序启动(ASP.NET Core应用)的候,有一些类或者是一些类型,会在容器里面进行注册,而这些类型用DI典型术语来说叫做服务(service)

而这些服务注册以后其他类型包括这些类型本身 都可以向IOC容器来请求这些注册的服务的实例,而且在注册的时候,你也可以设置这些实例的服务的生命周期。

服务的实例的生命周期是由IOC容器来控制的

而这些服务的实例的生命周期又分为3种

·生命周期

-Transient: 注册的服务在每次被请求的时候,都会生成一个新的实例

-Scoped: 指ASP.NET Core里面会有Web请求,而我们服务的实例会跟着Web请求,一次Web请求产生一个实例。Web请求被处理完的时候,生命周期就截止了。

-Singleton: 我们服务的实例一旦被创建,以后所有请求这个服务的时候,都会只用这一个实例。它会一直存活到直到我们的应用程序停止。

下面的例子我将注册一个自己的服务
新建一个文件夹;
再新建一个接口;
再创建两个类
用class:ChinaClock实现IClock接口
class:UtcClock也是实现IClock接口

像这个服务选择Singleton比较合适,泛型怎么写:先写接口IClock,再写具体的类,我们先注册ChinaClock.

这是怎么个意思呢,首先AddSingleton表示我们注册这个服务的生命周期。
后面泛型<>里面写的什么意思呢:每当有其他类型请求一个IClock,实现了这个接口的对象的时候,我们这个IOC容器就会返回一个ChinaClock这个类的一个实例。

我们来使用这个服务,就在项目里建立一个文件夹Controllers,再建立一个HomeController这么一个类,直接使用这个类

我们建立的HomeController直接让它继承Controller这个类,然后写一个构造函数,这里面我注入一个参数IClock,然后起个名叫clock。

这样写呢,构造函数里面的参数,我们整个ASP .NET Core的整个应用就会保证:如果你这个参数它的类型注册到了我们这个IOC容器里面了,那么它所对应的具体的类它的实例就会返回回来。

所以说我们注入的是IClock,注册的是ChinaClock这个具体的类。所以到这步,实际注入的是ChinaClock。

这种就叫做依赖注入,叫构造函数注入。注入了一个IClock对应的类的一个实例。

如果我不想注入ChinaClock而是注入UtcClock,则可以写<IClock ,UtcClock>

这样写不会改动Controller的代码,只需要改动接口处的就可以了。(使用接口之后,Controller跟具体的服务类它俩之间就解耦了)

DI优点

·解耦,没有强依赖。(类型之间进行解耦,比如说Controller这个类和服务类之间就没有强依赖。它俩同时依赖于一个接口(相当于依赖一个抽象))
-利于单元测试(因为解耦)
·不需要了解具体的服务类(不需要了解一些结构、内部细节等等)
·也不需要管理服务类的生命周期(生命周期由IOC容器来控制的)

二、 ASP .NET Core管道(pipeline)

Configure方法是做什么用的呢?
这个方法,它配置了ASP.NET Core针对处理http请求,它有一个管道,它就是配置这个管道用的。

我们的 ASP .NET Core管道 会使整个应用对http请求是如何进行响应。

当你的ASP.NET Core应用 从浏览器接收到http请求之后,这个请求是从管道里面进来的,之后再从管道回去。
在这里插入图片描述

如果这个管道里面什么都没有,那么这个请求过来、回去,就什么都不会发生。
所以如果你想让ASP .NET Core这个应用能发挥作用的话,就应在管道里面放一些东西。而我们把放在管道中间的(能够处理请求的)东西叫做中间件(middleware)。

举个例子,比如我们使用的MVC框架,在这里就是一个中间件,我们可以把它放在管道里。但是通常可能会进行一些身份认证,所以说身份认证的中间件通常会放在MVC的前面。而在ASP .NET Core里面,如果我们shifu这个静态文件的话 ,比如说js文件、html文件、css文件,这个时候我们需要使用Static Files这个中间件。
在这里插入图片描述

而在这个http请求进来的时候,我们这些中间件能够处理哪些东西呢?
在中间件里面我们可以看到请求的数据,以及我们Web Server相关的东西或者说是特性。我们使用中间件可以对这些东西进行处理或者是写入一些东西等。
在这里插入图片描述

三、Configure方法

我们继续看Configue方法。
在这里插入图片描述

第一行表示如果我们这个环境是开发环境(这个模式是通过设置一个环境变量,你可以设置它的值为development或production等),它就是判断你这个环境变量的值是不是development。

如果是,就用了下面的一个中间件(工作原理:如果我们在开发的时候,这个程序发生了一些异常,并且这个异常没有做处理的话,那么就会把这个异常错误信息展示在页面里,页面里会有这个错误的详细信息),这个中间件就是干这个用的。

所以在开发模式下,插入到管道的第一个中间件是这个。

四、端点 endpoint

·端点就是进来的http请求的url的结尾那部分也就是端点),这部分会被中间件进行处理。

用过MVC的话就会知道,如果想处理这些端点(也就是url结尾这部分),你就需要指定一下路由。
指定路由有两种方式:
第一种是在Controlller上面写一些属性。
第二种是指定一个路由表,设定的这些路由,实际上就是一些模版,这些模版它们会尝试匹配一些特定的URL端点,

所以说路由的工作原理简单来说就是这样
·/{controller}/{action}

·/home/index

五、ASP.NET Core应用的多样性

ASP.NET Core应用其实是由多种技术存在的

·MVC:/Home/Index

MVC本身需要路由,比如说特定的一个页面有可能是Home或Index.MVC需要路由。

·Razor Pages:/SomePage

这是另外一种应用形式,它也需要路由,需要一些网址来访问一些特定的页面。

·SignaIR:/Hub/Chat

另外一种技术,也需要路由,比如说我们做一个聊天应用,它肯定也需要做一个网址,才能进行通信。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值