新创建的ASP.NET Core程序中包含两个文件,分别是Program、Startup。其中,Program中Main方法是整个应用程序的入口,该方法如下:

    var host = WebHost.CreateDefaultBuilder(args)
.UseKestrel(options => options.AddServerHeader = false)
.UseStartup<Startup>()
.Build();
host.Run();

它的主要作用就是设置使用Kestrel服务器,并设置程序启动类Startup。

严格来说,Startup类需要继承自IStartup接口,但是此处采用契约的方式来实现,及时没有继承自IStartup,UseStartup方法内部也会将该类包装成IStartup接口的实现。

Startup类包括一个属性一个构造函数,两个方法,分别为

public class Startup
{
public IConfiguration Configuration { get; } public Startup(IConfiguration configuration)
{
//set configuration
Configuration = configuration;
} public IServiceProvider ConfigureServices(IServiceCollection services)
{
// to do something
public void Configure(IApplicationBuilder application)
{
// to do something
}
}

Startup类中的方法的调用顺序为

Startup构造->ConfigureServices(...)->Configure(...)
ASP.NET MVC中的某些功能,需要从IServiceCollection中请求某些服务,而这些服务都需要在接入请求管道之前被加入IServiceCollection中,因此,ConfigureServices函数必须在Configure之前被调用。
  • 构造函数中的传入参数IConfiguration configuration中包含默认配置文件appsettings.json中的配置。我们能够通过获取配置的方式得到对应的配置信息。我们也可以在此处获取自定义配置信息。
  • ConfigureServices函数的传入参数IServiceCollection services,可以将程序中使用的服务使用依赖注入(Dependency Injection)的方式加入到服务容器,这样程序中的其他类就可以获取并使用它。向服务容器中添加服务时,就涉及到服务的生命周期的问题,ASP.NET Core中生命周期的定义包括以下三种:
Transient 瞬时 每次请求时都会创建,适合轻量级,无状态的服务
Scoped 作用域 每次请求中只创建一次
Signleton 单例 第一次被请求时创建,以后每个后续请求都将使用这个实例
  • Configure函数的传入参数IApplicationBuilder application,用来配置应用程序将如何响应每个HTTP请求。

DotNetCore学习-2.程序启动的更多相关文章

  1. Castle ActiveRecord学习(二)配置、引用、程序启动

    来源:http://www.cnblogs.com/zxj159/p/4082987.html 配置数据库驱动: Model层引用:Castle.ActiveRecord.dll.NHibernate ...

  2. Qt程序启动画面播放(gif与swf两种动画格式)

    学习Qt有一段时间了,发现一个小问题,网上关于Qt的资料或者总结性的学习及应用文章有点少. 比如,Qt完整的API,程序运行之前的启动画面如何按理想效果播放等,每次想在项目中添加一些应用的时候,总是找 ...

  3. CentOS学习笔记--程序管理

    程序管理 一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为程序(process).程序是操作系统上非常重要的概念, 所有系统上面跑的数据都会以程序的型态存在.那么系统的程序有哪些状态?不同 ...

  4. 【iOS程序启动与运转】- RunLoop个人小结

    学习iOS开发一般都是从UI开始的,从只知道从IB拖控件,到知道怎么在方法里写代码,然后会显示什么样的视图,产生什么样的事件,等等.其实程序从启动开始,一直都是按照苹果封装好的代码运行着,暴露的一些属 ...

  5. 开源中国安卓client源代码学习(一) 渐变启动界面

    开源中国安卓client源代码学习(一) 渐变启动界面 准备学习安卓开发, 看到网上有人推荐开源中国安卓client的源代码, 说里面包括了大部分技术, 于是准备好好研究研究. 特开通此系列博客来记录 ...

  6. Android应用程序启动过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6689748 前文简要介绍了Android应用程 ...

  7. 从mina中学习超时程序编写

    从mina中学习超时程序编写 在很多情况下,程序需要使用计时器定,在指定的时间内检查连接过期.例如,要实现一个mqtt服务,为了保证QOS,在服务端发送消息后,需要等待客户端的ack,确保客户端接收到 ...

  8. zigbee学习:示例程序SampleApp中按键工作流程

    zigbee学习:示例程序SampleApp中按键工作流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:IAR8. ...

  9. zigbee学习:示例程序SampleApp中通讯流程

    zigbee学习:示例程序SampleApp中通讯流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参考链接: http://wjf88223.bl ...

随机推荐

  1. UBUNTU14.0.4安装eclipse

    jdk工具下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 点击这个下载 ...

  2. XXE(XML External Entity attack)XML外部实体注入攻击

    导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...

  3. JavaScript实现HTML页面集成QQ空间分享功能

    <!DOCTYPE HTML> <html> <head> <title>QQ空间分享</title> <meta http-equi ...

  4. Shell-6--预定义变量

  5. Iptables-redhat/centos

    6用iptables 7默认用firewalld firewalld 与 iptables 过滤点,表 做nat是使用postrouting,prerouting表 Samba服务所使用的端口和协议: ...

  6. MySQL 组提交(group commit)

    目录 前言 改进 原理 实现 参数 注意 前言 操作系统使用页面缓存来填补内存和磁盘访问的差距 对磁盘文件的写入会先写入道页面缓存中 由操作系统来决定何时将修改过的脏页刷新到磁盘 确保修改已经持久化到 ...

  7. python中的数字取整(ceil,floor,round)概念和用法

    python中的数学运算函数(ceil,floor,round)的主要任务是截掉小数以后的位数.总体来说 就是取整用的.只是三者之间有微妙的区别:   floor() :把数字变小 ceil() : ...

  8. Shell - 文本处理

    珠玉在前,不再赘言. 常用命令 LinuxShell文本处理工具集锦 数据工程师常用的Shell命令 文件和目录管理 简明教程 AWK简明教程 SED简明教程 命令详解 linux sort,uniq ...

  9. Linux - 创建定时任务

    crontab命令 用来创建周期性定时任务 crontab {-l|-r|-e} -l 显示当前的 crontab -r 删除当前的 crontab -e 使用编辑器编辑当前 crontab 文件 输 ...

  10. SVN 分支主干的相互合并

    1.主干合并到分支 1在本地trunk中先update一下,有冲突的解决冲突,保证trunk和repository已经完全同步, 2.在/branches /MyProject上右键,依次选择”Tor ...