.net core Web应用启动类
在ASP.NET Core中,Startup
类为Web应用的入口类,用于配置Web服务的管道/过滤器以及Web应用所能用到的服务。在启动Web应用后,ASP.NET将在主库中查询名为Startup
的类,无论查找到的Startup
类的访问限制是什么,ASP.NET Core将直接加载该类并执行后续的操作。ASP.NET的查询方式为首先查找主库中的根命名空间,根命名空间中不包含Startup
类,则根据字典序查找剩余的命名空间,并加载第一个找到的Startup
类。(这一段存疑)
Startup
类参照依赖注入(Dependency Injection)设计模式实现。在Startup
类中所依赖的对象,可以通过Startup
类的构造方法注入到类内。依照规定,Startup
类中必须包含Configure
方法,可以定义ConfigureServices
方法。
0x00 Startup
类中依赖的对象所在容器在哪儿?
首先,要说明OWIN所定义的层次模型。
- Host层,用于配置程序以及启动进程。
- Server层,用于提供HTTP Server,配置Middleware以及相应服务。
- Middleware层
- Application层
这里我们不关注Middleware以及Application层所要负责哪些东西,仅关注Host和Server层。 我们可以发现,Host层中所实现的内容,在Program.Main
方法中实现,同时这个方法也是真正程序的入口。而Server层就是我们现在所论及的Startup
类中的东西了,那很容易就能明白,注入到Startup
类中的对象,原来所处的容器应该是在Host层中。我们进一步去观察Program.cs文件中的内容
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run()
}
代码中不能发现其容器所在,而在IWebBuilder接口中(即host的类型)是如下定义的
public interface IWebHost : IDisposable
{
IFeatureCollection ServerFeatures { get; }
IServiceProvider Services { get; }
void Start();
}
很显然地,Services
便是我们要找的依赖对象容器。
0x01 Configure
方法
该方法便是用于安排布置在管道中过滤器的顺序的方法。配置过滤器必须要使用IApplicationBuilder
的实例,该实例同样是通过依赖注入的方法进入到Configure方法中使用的。因此Configure方法必须携带一个IApplicationBuilder
参数。因为是依赖注入,如果有需要,还可以再添加。
在本方法中,以Use开头的方法均是在管道中添加一个过滤器。
0x02 ConfigureServices
方法
在Startup
方法中,可以有选择的添加该方法,该方法用于配置应用所能使用的服务,这里同样是使用了依赖注入的设计模式,ConfigureServices
中的内容就是在装填应用所依赖的服务容器。
.net core Web应用启动类的更多相关文章
- asp.net core 系列 2 启动类 Startup.CS
学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 在探讨Startup启动类之前,我们先来了解下Asp.NET CORE 配置应用程序的执行顺序 ...
- 避免在ASP.NET Core 3.0中为启动类注入服务
本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingE ...
- .Net Core初识以及启动配置
.net程序员为什么要学习.net core .Net Core 是.Net的未来,微软在19年 5月已经明确说明,未来只有.Net 5(=.NET Core vNext),.Net 5是.net c ...
- 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等
设计模式(一)单例模式:创建模式 先聊一下关于设计的几个原则(1)单一原则(SRP):一个类应该仅有一个引起它变化的原因 :意思就是 (一个类,最好只负责一件事情,并且只有一个引起它变化的原因(2)开 ...
- asp.net core 系列 2 启动Startup类介绍
一.Startup类 ASP.NET Core 应用是一个控制台应用,它在其 Program.Main 方法中创建 Web 服务器.其中Main方法是应用的托管入口点,Main 方法调用 WebHos ...
- Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误——SHH框架
SHH框架工程,Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误 1.查看配置文件web.xml中是否配置.or ...
- 在Mac下创建ASP.NET Core Web API
在Mac下创建ASP.NET Core Web API 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: 官方文档涉 ...
- ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]
入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...
- NET CORE 应用程序启动
原文:Application Startup作者:Steve Smith翻译:刘怡(AlexLEWIS)校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程序提供 ...
随机推荐
- (转)Python 字符串格式化 str.format 简介
原文:https://www.cnblogs.com/wilber2013/p/4641616.html http://blog.konghy.cn/2016/11/25/python-str-for ...
- (转)Mysql主从复制搭建及详解
http://www.cnblogs.com/kevingrace/p/6256603.html---------Mysql主从同步(1)-主从/主主环境部署梳理 原文:http://blog.csd ...
- underscore相关记录
为什么使用void 0代替undefined? 在很多框架的源码以及webpack打包出来的bundle.js中,我们都可以看到void 0的身影,如下: function generateRando ...
- hibernate树状映射
例如公司的组织机构:一个公司可以有多个子公司,一个子公司子有多个部门. 其实就是一张表, 例子程序: Organization类: package com.oracle.hibernate; impo ...
- Json&XML比较
1.定义 1.1 XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用 ...
- c++ 同步阻塞队列
参考:<C++11深入应用> 用同步阻塞队列解决生产者消费者问题. 生产者消费者问题: 有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之 ...
- redis实战笔记(1)-第1章 初识Redis
第1章 初识Redis 注:本书在redis3.0版本的,比如redis3.0以后支持服务端集群.3.0之前只能客户端分片. 本章主要内容 1.Redis与其他软件的相同之处和不同之处 2.Re ...
- Windows下安装PHP开发环境
一.Apache 因为Apache官网只提供源代码,如果要使用必须得自己编译,这里我选择第三方安装包Apache Lounge. 进入Apachelounge官方下载地址:http://www.apa ...
- 把AspDotNetCoreMvc程序运行在Docker上-part2:修改容器以及发布镜像
在上一个part<把AspDotNetCoreMvc程序运行在Docker上-part1>,已经将成功将aspdotnetcore程序运行在两个不同的容器中,目前两个容器的内容完全相同,只 ...
- Golang聊天室
一.前期准备 前期准备 需要 import "net"包 IP 类型,其中一个重要的方法是 IP.ParseIP(ipaddr string)来判断是否是合法的 IP 地址 TCP ...