ASP.Net Core 2.2 MVC入门到基本使用系列 (三)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力.
本教程知识点大体分为以下几个阶段
- ASP.Net Core MVC基础知识
- Startup基本配置和理解
- Controller使用
- Razor视图
- 传统视图
- Model Validation (基本用法)
- 一点点的Vue (教程使用Vue配合)
- SqlSugar ORM (进行数据库交互)
- Entity Framework Core(基本介绍使用)
- 授权和身份验证(MVC的, WebApi的不进行介绍)
- 安全性
- 测试 / 单元测试
- 性能基本优化
- 日志功能
- CI/CD
- Windows部署
- Linux部署
想必大家都知道ASP.Net Core MVC默认自带了DI容器的, 我们可以很方便的进行使用, 来方便管理对象和生命周期, 那么这一节我就会详细讲解服务注册, 顺便简单讲解一下管道, 让大家知道了基本的MVC运行流程.
回顾一下上一节的内容, 我们从配置文件中获取了输出的字符, 也介绍各个配置的 "优先级" (其实是配置覆盖), 那么我们这一节以服务的方式输出这个字符串, 然后用过DI进行注册服务, 快速了解服务注册.
DI容器呢, 依赖接口, 所以我们先新建一个接口, 就叫 IWelcome , 接口里面定义个方法, 叫GetWelcomMsg, 然后再建个类, 实现这个接口, 这样, 我们的一个最基本的服务就做好了. 代码结构和代码如下图 (我建了个文件夹, 存放这些服务):



代码编写完之后, 我们尝试在Configure方法里面注入引用这个接口, 因为我们获取配置信息的时候也是直接在这个方法里面注入使用的, 那我们来试试, 代码如下图 :

一切都很正常, 方法也能调用, 我们跑起来试试看, 能不能正常使用.
一点都不意外, 它报错了, 报错信息如下图 :

意思就是无法解析IWelcome这个服务, 也是就无法注入这个服务.
那么为什么 IConfiguration, IHostingEnvironment, IApplicationBuilder等等之类的接口, 我们能直接注入使用呢, 那是ASP.Net Core MVC里面的源包里面, 已经自动为我们注册好了这几个服务, 我们直接可以使用. 我们要使用自定义的服务或者组件, 需要我们自己进行注册.
说到自定义服务注册, 就不得不说服务注册的几种方式, 或者说是几种不同的注册方法. 总共分为三种, 也就是三个注册服务的方法.
我们看看 Startup 这个类, 会发现它里面有个ConfigureServices方法, 看名字就知道, 它是配置服务用的, 有个IServiceCollection接口参数, 这个接口就是.Net Core默认提供的DI服务的接口管理对象, 我们所有注册的服务都可以通过这个接口进行管理或操作. 如果使用第三方包, 如Autofac另说, 这里不介绍Autofac的使用.
那么我们就可以通过IServiceCollection接口进行我们自定义服务的注册了, 上面提到了有三个注册服务的方法, 分别是 :
1. AddSingleton (单例模式注册服务, 也就是在整个应用程序中, 只会创建一个接口对象, 所有的请求都会使用这个接口对象, 可能会有并发问题)
2. AddTransient (管道机制注册服务. 也是在每个请求发生的时候, 都会创建一个接口对象, 给当前请求使用)
3. AddScoped (会话机制注册服务. 也就是在当前会话中, 只会创建一个接口对象. 什么是一个会话, 可以简单理解为当前浏览器打开到关闭, 这个过程就是一整个会话的过程)
那么这里, 我们先使用AddSingleton单例模式注册服务, 代码如下 :
services.AddSingleton<IWelcome, Welcome.Services.Welcome>();
上面提到的三个方法, 使用方式都一样, 都是两个泛型参数, 第一个泛型参数是接口, 第二个是泛型参数是接口实现类.
那么再运行一个我们的程序, 可以看到浏览器正常输出我们的字符串了.
至于上面三个不同生命周期的注册方法, 怎么使用, 看服务的用途, 一般我推荐使用AddScoped注册服务
到这里, 我们一个简单的服务就从定义到实现到注册到使用就完成了. 是不是很简单呢.
下面我们简单讲讲ASP.Net Core MVC的管道
这里我只会简单讲解ASP.Net Core MVC的管道运行流程, 不会讲解从监听端口到转发到ASP.Net Core MVC里面是怎么实现的
比如我们现在发起一个Get请求, 在MVC收到这个请求的时候, 我们的管道流程就开始运行了, 它会最先触发Logger这个中间件, 就是日志中间件, 这个中间件里面可以获取很多信息, 比如请求头部信息, 参数信息等等, 甚至我们可以对这些信息进行修改. 这些信息也会在控制台输出, 如果用的是dotnet run命令运行这个MVC程序的话, 这里不放截图了, 你们可以自己试试
在日志中间件执行完之后, 就会执行其它的中间件, 如果我们启用了其它的中间件. 比如我们启用了身份验证中间件, 那么在日志中间件执行完成之后, 就会执行身份验证中间件, 进行身份验证, 如果验证成功了, 继续下一步处理, 如果验证失败了, 就做其它处理, 比如重定向到登录页面等等.
在这一步执行完成之后, MVC管道就会进入路由匹配的过程. 如果匹配成了, 就正常返回HTML或JSON或XML数据等等, 如果匹配失败了, 就404错误等等.
这就是ASP.Net Core MVC管道的一个基本流程, 其实里面做的事情远远不止这些, 这里就不做深入的讲解, 如果有需要, 自行学习. 因为讲一个真正的管道机制, 一下子也讲不完. 这里的目的只是要大家基本了解ASP.Net Core MVC的基本运行流程.
到这里, 这一节的内容就结束了. 上面提到了中间件这个东西, 那下一节我们就讲究什么是中间件, 怎么使用中间件.
如果在使用.Net Core遇到任何问题, 都加群进行讨论, 群号: 1群: 225982985. 2群: 726648662. 3群: 654015377
上一篇: ASP.Net Core 2.2 MVC入门到基本使用系列 (二)
下一篇: ASP.Net Core 2.2 MVC入门到基本使用系列 (四)
ASP.Net Core 2.2 MVC入门到基本使用系列 (三)的更多相关文章
- ASP.Net Core 2.2 MVC入门到基本使用系列 (三)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (二)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (四)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (一)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (四)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (二)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.Net Core 2.2 MVC入门到基本使用系列 (一)(转)
本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...
- ASP.NET Core 2.0 MVC项目实战
一.前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的.之前实习时主要是做.NET的B/S架构的项目,主要还是 ...
- 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发
<ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...
随机推荐
- ubuntu 下当前网速查看
ubuntu下用ethstatus可以监控实时的网卡带宽占用.这个软件能显示当前网卡的 RX 和 TX 速率,单位是Byte 一.安装 ethstatus 软件 #sudo apt-get insta ...
- 【英宝通Unity4.0公开课学习 】(六)76讲到90讲
还是关于Mecanim动画的内容. 这些讲的每讲长度明显比前面的长,而且很多都涉及到脚本编写. 不过我还是2倍速给略览过去了,主要目的就是学个框架嘛 :) 1. Blend Tree 可嵌套. 可理解 ...
- [leetcode]112. Path Sum路径和(是否有路径)
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数
ROS Indigo beginner_Tutorials-08 ROS服务 和 ROS参数 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...
- css浮动的元素居中
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- Js中的this关键字(吉木自学)
研究生毕业答辩完,开始继续为转行努力.小白要奋斗了,加油.本文引自JS核心系列:浅谈函数的作用域. 在一个函数中,this总是指向当前函数的所有者对象,this总是在运行时才能确定其具体的指向, 也才 ...
- Luogu 3959 [NOIP2017] 宝藏- 状压dp
题解 真的想不到这题状压的做法...听说还有跑的飞快的模拟退火,要是现场做绝对滚粗QAQ. 不考虑深度,先预处理出 $pt_{i, S}$ 表示让一个不属于 集合 $S$ 的 点$i$ 与点集 $S$ ...
- 那些你不知道的PS大片摄影
你以为这张照片是P出来的? 才不是! 人家是开个起重机吊着拍的! 而且没有任何保护措施! 这样的照片战斗民族的摄影师才敢这样拍…要是在天朝这么做估计都找不到模特… 这张照片出自乌兹别克斯坦的摄影师Ra ...
- linux bluez
Linux下开放的蓝牙协议栈主要包括IBM公司的BlueDrekar,Nokia公司的Affix, Axis公司的OpenBT和官方协议栈BlueZ.我们主要对Bluez进行探讨. BlueZ基础代码 ...
- 我所理解的 Laravel 请求 生命周期
转载自:https://laravel-china.org/topics/3343/my-understanding-of-the-laravel-request-life-cycle 当你使用一个工 ...