时间:2022-10-08 12:54:44 | 栏目:.NET代码 | 点击:次
想必大家都知道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接口进行我们自定义服务的注册了, 上面提到了有三个注册服务的方法, 分别是 :
那么这里, 我们先使用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的基本运行流程.