NET CORE 应用程序启动
原文: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 实例并可选地返回 IServiceProvider
。ConfigureServices
需要在 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
提供了访问应用程序属性,类似于ApplicationName
、ApplicationVersion
以及 ApplicationBasePath
。可以在 Startup
的构造函数和 Configure
方法中使用。
IHostingEnvironment
提供了当前的 EnvironmentName
、WebRootPath
以及 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。
扩展阅读
dotNet Core Studying Group:436035237
NET CORE 应用程序启动的更多相关文章
- .NET CORE应用程序启动
ASP.NET Core 应用是在其 Main 方法中创建 Web 服务器的控制台应用: Main 方法调用 WebHost.CreateDefaultBuilder,通过生成器模式来创建web主机. ...
- 如何在ASP.NET Core程序启动时运行异步任务(3)
原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...
- 如何在ASP.NET Core程序启动时运行异步任务(2)
原文:Running async tasks on app startup in ASP.NET Core (Part 2) 作者:Andrew Lock 译者:Lamond Lu 在我的上一篇博客中 ...
- 如何在ASP.NET Core程序启动时运行异步任务(1)
原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目 ...
- ASP.NET Core 应用程序Startup类介绍
Startup类配置服务和应用程序的请求管道. Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBui ...
- ASP.NET Core 应用程序Startup类介绍 (转载)
Startup类配置服务和应用程序的请求管道. Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBui ...
- Net core学习系列(五)——Net Core应用程序Startup类介绍
一.Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBuilderExtensions)的 UseSt ...
- ASP.NET Core 中文文档 第三章 原理(1)应用程序启动
原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...
- 在 ASP.NET Core 程序启动前运行你的代码
一.前言 在进行 Web 项目开发的过程中,可能会存在一些需要经常访问的静态数据,针对这种在程序运行过程中可能几乎不会发生变化的数据,我们可以尝试在程序运行前写入到缓存中,这样在系统后续使用时就可以直 ...
随机推荐
- Unity截图
什么都不说了,直接上代码. using UnityEngine; using System.Collections; using System.IO; public class CutImage : ...
- 树 -- AVL树
前言 通过之前对二叉查找树的讨论,我们知道在给定节点数目的情况下,二叉树的高度越低,查找所用时间也就越短. 在讨论红黑树的时候,我们说过红黑树并非完全"平衡"的二叉树,只是近似&q ...
- 如何设置MySQL数据库名、表名大小写敏感
在 MySQL 中,数据库和表其实就是数据目录下的目录和文. 因而,操作系统的敏感性决定数据库和表命名的大小写敏感.这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Un ...
- Highcharts使用手册
chart: { type: 'area', ignoreHiddenSeries: false, //如果true,一旦一个系列被隐藏,轴将会扩展剩余的可见系列 }, 这是设置的两个纵坐标轴: yA ...
- Android JSON数据的读取和创建
预先准备好的一段JSON数据 { "languages":[ {"id":1,"ide":"Eclipse"," ...
- [LeetCode][Python]Integer to Roman
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/integer ...
- window.open打开新页面,并将本页数据用过url传递到打开的页面;需要两个页面;
页面1 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8 ...
- python IOError: invalid mode ('r') or filename
我想要用pandas.read_table()将数据表中的数据读到一个pandas DataFrame对象中: import pandas as pd unames = ['user_id', 'ge ...
- hdu3280Equal Sum Partitions (区间DP)
Problem Description An equal sum partition of a sequence of numbers is a grouping of the numbers (in ...
- xcode -饼状进度条
界面搭建 创建一个画饼状的类 eatView 集成UIView #import "eatView.h" @implementation eatView // Only overr ...