原文:Application Startup

作者:Steve Smith

翻译:刘怡(AlexLEWIS)

校对:谢炀(kiler398)许登洋(Seay)

ASP.NET Core 为你的应用程序提供了处理每个请求的完整控制。Startup 类是应用程序的入口(entry point),这个类可以设置配置(configuration)并且将应用程序将要使用的服务连接起来。开发人员可以在 Startup 类中配置请求管道,该管道将用于处理应用程序的所有请求。

章节:

Startup 类

在 ASP.NET Core 中,Startup 类提供了应用程序的入口,而且在所有应用程序中都有 Startup 类。可能会存在特定环境的启动类和方法(参见 Working with Multiple Environments),但无论如何, Startup 类都将被充当为应用程序的启动点。ASP.NET 会在主程序集中搜索名为 Startup 的类(在任何命名空间下)。你可以指定一个其它程序集用于检索,只需使用 Hosting:Application 配置键。ASP.NET 并不关心 Startup 类是不是定义为 public,如果它符合命名规范,ASP.NET 将继续加载它。如果有多个 Startup 类,也不会触发异常,ASP.NET 将基于命名空间选择其中一个(匹配项目的根命名空间优先,否则使用第一个按字母排列的命名空间中的类)。

Configure 方法

Configure 方法用于指定 ASP.NET 应用程序将如何响应每一个 HTTP 请求。简单来说,你可以配置每个请求都接收相同的响应。然而,大多数现实世界应用程序需要比这多得多的功能。更复杂的管道配置可以封装于 中间件(middleware) 之中,并通过扩展方法添加到 IApplicationBuilder 上。

Configure 方法必须接受一个 IApplicationBuilder 参数。一些额外服务,比如 IHostingEnvironment 或 ILoggerFactory 也可以被指定,如果在它们可用情况下,这些服务将会被服务器 注入 进来。在下例(源于默认的 Web 站点模板)中可见多个扩展方法被用于配置管道以支持 BrowserLink 、错误页、静态文件、ASP.NET MVC 以及 Identity。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug(); if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();//手工高亮
app.UseDatabaseErrorPage();//手工高亮
app.UseBrowserLink();//手工高亮
}
else
{
app.UseExceptionHandler("/Home/Error");//手工高亮
} app.UseStaticFiles();//手工高亮 app.UseIdentity();//手工高亮 // Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715 app.UseMvc(routes =>//手工高亮
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

每个 Use 扩展方法都会把一个 中间件 加入请求管道。比如 UseMvc 扩展方法会把 路由中间件 加进请求管道,并把 MVC 配置为默认的处理器。

在 Middleware 一章中,你可以了解到更多有关中间件的信息,并使用IApplicationBuilder 定义请求管道。

ConfigureServices 方法

你的 Startup 类能可选地包含一个 ConfigureServices 方法用来配置用于应用程序内的服务。ConfigureServices 方法是 Startup 类中的公开方法,通过参数获取一个IServiceCollection 实例并可选地返回 IServiceProviderConfigureServices 需要在 Configure 之前被调用。这一点非常重要,这是因为像 ASP.NET MVC 中的某些功能,需要从 ConfigureServices 中请求某些服务,而这些服务需要在接入请求管道之前先被加入 ConfigureServices 中。

正如通过 Configure,推荐在 IServiceCollection 上使用扩展方法来包装含有大量配置细节的 ConfigureServices 。你可在本例(使用了默认的 Web 站点模板)中看到几个 Add[Something] 扩展方法被用于设置应用程序,以便能够使用 Entity Framework、Identity 和 MVC:

public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>//手工高亮
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity<ApplicationUser, IdentityRole>()//手工高亮
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders(); services.AddMvc();//手工高亮 // Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}

通过 依赖注入(dependency injection) 可将服务加入服务容器,使其在应用程序中可用。正如 Startup 类能将指定的依赖项作为其方法参数——而不是硬编码(hard-coding)来实例化特定实现——对于中间件、MVC 控制器以及应用程序中的其它类来说都可以做到这一点。

ConfigureServices 方法同样是可以增加配置选项类的地方(如上例中的 AppSettings),只要你想让它在应用程序中生效。更多有关配置选项的信息请阅读Configuration

在启动时服务可用

ASP.NET Core 在应用程序启动期间提供了一些应用服务和对象。你可以非常简单地使用这些服务,只需要在在 Startup 类的构造函数或是它的 Configure 与 ConfigureServices 方法中的一个包含合适的接口即可。下面定义了在 Startup 类中对每个方法可用的服务。框架服务和对象包括:

IApplicationBuilder

被用于构建应用程序的请求管道。只可以在 Startup 中的 Configure 方法里使用。更多请阅读 请求Features

IApplicationEnvironment

提供了访问应用程序属性,类似于ApplicationNameApplicationVersion 以及 ApplicationBasePath。可以在 Startup 的构造函数和 Configure 方法中使用。

IHostingEnvironment

提供了当前的 EnvironmentNameWebRootPath 以及 Web 根文件提供者。可以在 Startup 的构造函数和 Configure 方法中使用。

ILoggerFactory

提供了创建日志的机制。可以在 Startup 的构造函数或 Configure 方法中使用。更多请阅读 Logging

IServiceCollection

当前容器中各服务的配置集合。只可在 ConfigureServices 方法中被使用,通过在该方法中配置可使服务在应用程序中可用。

看看 Startup 类中按它们被调用排序的每一个方法,下面的服务可被作为参数:

Startup Constructor - IApplicationEnvironment - IHostingEnvironment - ILoggerFactory

ConfigureServices - IServiceCollection

Configure - IApplicationBuilder - IApplicationEnvironment - IHostingEnvironment - ILoggerFactory

注意

尽管 ILoggerFactory 在构造函数中可用,但它通常在 Configure 方法中配置。具体可阅读 Logging

扩展阅读

返回目录

ASP.NET Core 中文文档 第三章 原理(1)应用程序启动的更多相关文章

  1. ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化

    原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...

  2. ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态

    原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...

  3. ASP.NET Core 中文文档 第三章 原理(2)中间件

    原文:Middleware 作者:Steve Smith.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:许登洋(Seay) 章节: 什么是中间件 用 IApplicationBu ...

  4. ASP.NET Core 中文文档 第三章 原理(3)静态文件处理

    原文:Working with Static Files 作者:Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay).孟帅洋(书缘) 静态文 ...

  5. ASP.NET Core 中文文档 第三章 原理(10)依赖注入

    原文:Dependency Injection 作者:Steve Smith 翻译:刘浩杨 校对:许登洋(Seay).高嵩 ASP.NET Core 的底层设计支持和使用依赖注入.ASP.NET Co ...

  6. ASP.NET Core 中文文档 第三章 原理(11)在多个环境中工作

    原文: Working with Multiple Environments 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core 介绍了支持在多个环境中管 ...

  7. ASP.NET Core 中文文档 第三章 原理(17)为你的服务器选择合适版本的.NET框架

    原文:Choosing the Right .NET For You on the Server 作者:Daniel Roth 翻译:王健 校对:谢炀(Kiler).何镇汐.许登洋(Seay).孟帅洋 ...

  8. ASP.NET Core 中文文档 第三章 原理(7)配置

    原文:Configuration 作者:Steve Smith.Daniel Roth 翻译:刘怡(AlexLEWIS) 校对:孟帅洋(书缘) ASP.NET Core 支持多种配置选项.应用程序配置 ...

  9. ASP.NET Core 中文文档 第三章 原理(8)日志

    原文:Logging 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐.许登洋(Seay) ASP.NET Core 内建支持日志,也允许开发人员轻松切换为他们想用的其他日 ...

随机推荐

  1. 0-1背包问题蛮力法求解(c++版本)

    // 0.1背包求解.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream>   #define ...

  2. ABP文档 - Javascript Api - AJAX

    本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...

  3. 8.仿阿里云虚拟云服务器的FTP(包括FTP文件夹大小限制)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#iis 原文:http://dnt.dkill.net/Ar ...

  4. 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)

    相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...

  5. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  6. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  7. 学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?

    注册的服务器和中间件共同构成了ASP.NET Core用于处理请求的管道, 这样一个管道是在我们启动作为应用宿主的WebHost时构建出来的.要深刻了解这个管道是如何被构建出来的,我们就必须对WebH ...

  8. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  9. 【原创经验分享】WCF之消息队列

    最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...

  10. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...