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

原文:Application Startup
作者:Steve Smith
翻译:刘怡(AlexLEWIS)
校对:谢炀(kiler398)、许登洋(Seay)

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

章节:

  • Startup 类

  • Configure 方法

  • ConfigureServices 方法

  • 在启动时服务可用

  • 扩展阅读

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=532715app.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
提供了访问应用程序属性,类似于ApplicationName 、ApplicationVersion 以及 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。

原文地址:http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-3_1-application-startup.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于内容的推荐(Content-based Recommendations)

转载自 基于内容的推荐&#xff08;Content-based Recommendations&#xff09;Collaborative Filtering Recommendations (协同过滤&#xff0c;简称CF) 是目前最流行的推荐方法&#xff0c;在研究界和工业界得到大量使用。但是&#xff0c;工业界真正使用的系统一般都不会只…

[置顶]动态网页开发基础【笔记】

一、C/S结构和B/S结构1.C/S&#xff08;Client/Server&#xff09;:客户端服务程序&#xff0c;控制台程序&#xff0c;window应用2.B/S(Browser/Server):浏览器服务程序[java:jsp应用&#xff1b;C#:asp.net],web应用程序区别&#xff1a;C/S:客户端和服务器端都需要开发&…

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

原文&#xff1a;Working with Static Files作者&#xff1a;Rick Anderson翻译&#xff1a;刘怡(AlexLEWIS)校对&#xff1a;谢炀(kiler398)、许登洋(Seay)、孟帅洋(书缘) 静态文件&#xff08;static files&#xff09;&#xff0c;诸如 HTML、CSS、图片和 JavaScript 之类的…

使用IDEA Maven搭建Mybatis环境

本文是使用IDEA Maven搭建Mybatis环境 涉及到的搭配环境 JDK1.8 Maven3.6.3 IDEA2019 MySQL数据库 一、Maven介绍 Maven 是一个项目管理工具&#xff0c;可以对 Java 项目进行构建、依赖管理&#xff0c;是一个自动化构建工具。 自动化构建工具&#xff1a;将原材料&…

常用推荐算法

转载自 常用推荐算法在推荐系统简介中&#xff0c;我们给出了推荐系统的一般框架。很明显&#xff0c;推荐方法是整个推荐系统中最核心、最关键的部分&#xff0c;很大程度上决定了推荐系统性能的优劣。目前&#xff0c;主要的推荐方法包括&#xff1a;基于内容推荐、协同过滤…

不该活着的SqlHelper和DBHelper

前言&#xff1a; 还记得刚学ADO.NET的情景么&#xff1f; 还记得当年是怎么从ADO.NET被忽悠到用SqlHelper的么&#xff1f; 话说从入门到走上工作岗位那些年&#xff0c;我们就一直被纯纯地教导或引导&#xff0c;ADO.NET太原始&#xff0c;得封装成SqlHelper或DBHelper......…

使用IDEA配置Mybatis-Plus框架

使用IDEA配置Mybatis-Plus框架 本文是以使用IDEA配置Mybatis-Plus框架作为简单的讲解。 所涉及到的应用&#xff1a; IDEA2019Mybatis-Plus框架Mysql数据库Maven3.6.3jdk1.8 一、什么是Mybatis-Plus框架&#xff1f; MyBatis-Plus(简称MP)是一个MyBatis的增强工具&#xff…

css实现一级下拉菜单

涉及到的图片请到这里下载 涉及到的图片请到这里下载 涉及到的图片请到这里下载 html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"…

UserCF,基于用户的协同过滤算法

转载自 UserCF,基于用户的协同过滤算法UserCF&#xff1a;User Collaboration Filter&#xff0c;基于用户的协同过滤 算法核心思想&#xff1a;在一个在线推荐系统中&#xff0c;当用户A需要个性化推荐时&#xff0c;可以先找到和他有相似兴趣的其它用户&#xff0c;然后…

用BenchmarkDotNet给C#程序做性能测试

BenchmarkDotNet是一个用MIT协议开源的C#程序性能测试的一个库&#xff0c;非常简单易用。 用法 安装NuGet包&#xff0c;BenchmarkDotNet在需要做性能测试的方法前加上属性[Benchmark]。在Main函数调用性能测试var summary BenchmarkRunner.Run<Md5VsSha256>();。 工作…

ItemCF,基于物品的协同过滤算法

转载自 ItemCF,基于物品的协同过滤算法ItemCF&#xff1a;Item Collaboration Filter&#xff0c;基于物品的协同过滤 算法核心思想&#xff1a;给用户推荐那些和他们之前喜欢的物品相似的物品。 比如&#xff0c;用户A之前买过《数据挖掘导论》&#xff0c;该算法会根据此行…

用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

Swagger是一个描述RESTful的Web API的规范和框架。如果使用ASP.NET的话&#xff0c;可以用Swashbuckle来自动生成Swagger,具体参考如何使 WebAPI 自动生成漂亮又实用在线API文档。下面详细的介绍一下如何给ASP.NET Core的项目自动生成Swagger的API帮助文档。 创建ASP.NET Core的…

涨知识 | 100个中国最难读的地名,第一个就折了

内容来源网络&#xff0c;侵删&#xff01; 1.浙江丽水的丽&#xff0c;不读l&#xff0c;读l。 2.浙江台州、天台的台&#xff0c;不读ti&#xff0c;读tāi。 3.浙江嵊州的嵊&#xff0c;读音为shng。 4.浙江鄞县的鄞&#xff0c;读音为yn&#xff0c;不读jn。 5.浙江乐清的乐…

JSP 教程

JSP 教程JSP 教程JSP 简介JSP 开发环境搭建Eclipse JSP/ServletJSP 结构JSP 生命周期JSP 语法JSP 指令JSP 动作元素JSP 隐式对象JSP 客户端请求JSP 服务器响应JSP HTTP 状态码JSP 表单处理JSP 过滤器JSP Cookie 处理JSP SessionJSP 文件上传JSP 日期处理JSP 页面重定向JSP 点击…

IronPython项目有了新负责人

运行IronPython项目的社区领导职责已经交给了Alex Earl和Benedikt Eggers。之前的负责人Jeff Hardy自微软在2010年不再积极参与以来一直负责项目的运行。 Jeff Hardy写道&#xff1a; 应该已经相当明显了&#xff0c;IronPython项目有点停滞不前&#xff0c;那主要是我的错&…

修改Tomcat编码方式的两种方法

转载自 修改Tomcat编码方式的两种方法方法一&#xff1a;推荐&#xff0c;不会影响到其它项目 见我的另一篇博客&#xff1a;http://www.cnblogs.com/x_wukong/p/3292664.html 修改方法&#xff1a; 修改tomcat下的conf/server.xml文件&#xff0c;找到Connector标签&#x…

Microsoft宣布.NET Core支持计划

微软宣布针对.NET Core、ASP.NET Core和Entity Framework Core的支持计划。据来自微软的Lee Coward介绍&#xff0c;公司计划使用一种双管齐下的方法来管理这些系统的发布。该计划回答了微软开源计划背后的其中一个主要问题——开发人员可以在多长时间内依赖微软向这些年轻的项…

《机器学习项目开发实战》送书活动结果公布

截止到8月8日24&#xff1a;00&#xff0c;本次送书活动 共收到70位同学参与回复&#xff0c;本次很多同学在看到活动的书《机器学习项目开发实践》&#xff0c;自行就到各大网络商店上购买了书&#xff0c;据反馈这个书很不错&#xff0c;小二昨天也收到一本人民邮电出版社的书…

如何在局域网访问Tomcat项目

转载自 如何在局域网访问Tomcat项目1 前言有时候因为工作需要&#xff0c;我们需要访问服务器上的项目或是把你的机器上的项目让你的同事访问到&#xff0c;诸如此类的&#xff0c;都涉及到了这个课题&#xff1a;如何在局域网访问Tomcat项目&#xff1f;而tomcat本身是支持局…

键盘录入一个正整数,把它的各个位上的数字倒着排列形成一个新的整数并输出。 例如:12345 数出54321 78760 输出6787(0省去)

package com.coffn.demos; /*** 4、键盘录入一个正整数&#xff0c;把它的各个位上的数字倒着排列形成一个新的整数并输出。例如&#xff1a;12345 数出54321 78760 输出6787&#xff08;0省去&#xff09;*/ import java.util.Scanner;public class Demo1 {public static vo…