来源https://docs.asp.net/en/latest/fundamentals/startup.html

ASP.NET 5 使得应用对每个http请求有完整的控制权。Startup类是程序的入口,用来设置配置以及wire up一个用程序所使用的服务。开发者也是通过Startup类来配置应用程序的请求管道。

Startup类##

Startup是程序入口,是必须的。而且也可以提供基于环境配置的Startup类和方法,详见。ASP.NET通过在主程序集中搜索Startup命名的类来找到入口。你也可以指定Hosting:Application configuration key来使用一个不同的程序集。Startup类是否带public是没有关系的,即使有多个Startup类,也不会触发异常,ASP.NET会基于命名空间来选择一个(先基于项目根命名空间来选择,然后在基于命名空间的字母顺序来选择)。

Startup类可以在构造器中注入依赖,一般情况下应用是通过Startup类的构造器来配置详见。Startup类必须定义个Configure方法,ConfigureServices方法是可选的,他们会在应用启动时调用。

Configure方法##

Configure方法指定了应用对每个http请求的响应。最简单的情况,你可以配置每个请求收到同样的响应。但是实际项目是比较负复杂的,因此你可以使用封装好的中间件来通过IApplicationBuilder的扩展方法类配置。

Configure方法必须接收参数IApplicationBuilder,额外的服务如IHostingEnvironment和ILoggerFactory也可以添加到Configure方法的参数中,可以被注入进来。如下默认web模板,通过IApplicationBuilder扩展方法来配置服务BrowserLink, error pages, static files, ASP.NET MVC, and Identity。

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

你可以通过源码来查看扩展方法。例如UseMvc是定义在BuilderExtensions中的。它的主要责任是确保MVC是被添加((in ConfigureServices)的和配置MVC路由的的。

Middleware 对与中间件可以了解更多以及使用IApplicationBuilder来配置请求管道。

ConfigureServices方法##

ConfigureServices方法是可选的,可以配置应用所使用的服务。ConfigureServices 是公共方法,参数是IServiceCollection,可选的返回IServiceProvider。这个ConfigureServices 方法在Configure之前调用。这很重要,因为一些特性如ASP.NET MVC需要先在ConfigureServices中配置,然后才能被加入到http请求管道中。

如Configure方法一样,推荐的做啊是,将需要配置的一些特性添加到IServiceCollection的扩展方法中(it is recommended that features that require substantial setup within ConfigureServices be wrapped up in extension methods on IServiceCollection)。在默认的web模板中,你可以看到有几个Add[Something]扩展方法来配置来自EF和Identiy以及MVC的服务。

public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])); services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders(); services.AddMvc(); // Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}

通过依赖注入,将服务添加到服务容器中,使得在应用中可用。Startup 类可以指定方法参数的所需依赖,而不是硬编码一个具体实现,你的中间件,mvc controller和其他类也是如此。

ConfigureServices中你也的加入配置选项类,如AppSettings,然后应用中即可用,详见Configuration

Startup类中的可用服务##

ASP.NET 5 在Startup类中提供了一些应用服务和对象。可以通过把合适的接口放进Startup的构造器参数里或者它的Configure或ConfigureServices方法的参数里,这些服务即可用的。Startup类中的每个方法的可用服务如下。framework服务和对象包括

  • IApplicationBuilder 用来构建http请求管道,仅仅在Startup类中的Configure方法中可用,更多详见Request Features
  • IApplicationEnvironment 提供应用属性,如ApplicationName, ApplicationVersion, and ApplicationBasePath. 在Startup类构造器和Configure方法可用。
  • IHostingEnvironment Provides the current EnvironmentName, WebRootPath, and web root file provider. Available to the Startup constructor and Configure method.
  • ILoggerFactory 提供创建日志的机制,在构造器和Congigure方法中可用。详见Logging
  • IServiceCollection 容器中当前配置的服务集合,只在ConfigureServices中可用,来配置应用中可用的服务。

Startup类中方法调用顺序如下,以及他们可用的服务。

Startup Constructor - IApplicationEnvironment - IHostingEnvironment - ILoggerFactory

ConfigureServices - IServiceCollection

Configure - IApplicationBuilder - IApplicationEnvironment - IHostingEnvironment - ILoggerFactory

尽管ILoggerFactory在构造器中可用,但是一般配置在Configure方法中。详见Logging

ASP.NET Core 1.0基础之应用启动的更多相关文章

  1. ASP.NET Core 1.0 基础与应用启动

    .NET Core http://dotnet.github.io/[https://github.com/dotnet/coreclr] ASP.NET Core 1.0 https://get.a ...

  2. ASP.NET Core 1.0基础之依赖注入

      来源https://docs.asp.net/en/latest/fundamentals/dependency-injection.html ASP.NET Core 1.0在设计上原生就支持和 ...

  3. ASP.NET Core 1.0 基础之配置

    来源https://docs.asp.net/en/latest/fundamentals/configuration.html ASP.NET Core 1.0支持不同的配置选项.应用配置数据可以是 ...

  4. ASP.NET Core 1.0基础之日志

    过年出去玩了一圈,回来继续翻译.前两天偷懒没有翻译,只是转了两篇C# 7计划中的新features,大家还是很支持的.现在继续完善这个系列. 来源https://docs.asp.net/en/lat ...

  5. ASP.NET Core 1.0基础之诊断

    来源https://docs.asp.net/en/latest/fundamentals/diagnostics.html ASP.NET Core 1.0包含了一些新的特性来辅助诊断问题.可以在S ...

  6. 探索ASP.Net Core 3.0系列四:在ASP.NET Core 3.0的应用中启动时运行异步任务

    前言:在本文中,我将介绍ASP.NET Core 3.0 WebHost的微小更改如何使使用IHostedService在应用程序启动时更轻松地运行异步任务. 翻译 :Andrew Lock   ht ...

  7. ASP.NET Core 1.0基础之静态文件处理

    来源 这些HTML , CSS files, image files, 和JavaScript这些静态文件,是ASP.NET能够直接响应给客户端的.本文详述下ASP.NET和静态文件的关系. Serv ...

  8. 探索ASP.NET Core 3.0系列一:新的项目文件、Program.cs和generic host

    前言:在这篇文章中我们来看看ASP.Net Core 3.0应用程序中一些基本的部分—— .csproj项目文件和Program.cs文件.我将会介绍它们从 ASP.NET Core 2.x 中的默认 ...

  9. [转]探索ASP.NET Core 3.0 系列

    这是该系列的第一篇文章:探索ASP.NET Core 3.0. 第1部分-探索新的项目文件Program.cs和通用主机(本文) 第2部分-比较ASP.NET Core 3.0模板之间的Startup ...

随机推荐

  1. 数据库连接池(c3p0与druid)

    1.数据库连接池概念 其实就是一个容器(集合),存放数据库连接的容器.当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归 ...

  2. POJ 2349 Arctic Network(最小生成树+求第k大边)

    题目链接:http://poj.org/problem?id=2349 题目大意:有n个前哨,和s个卫星通讯装置,任何两个装了卫星通讯装置的前哨都可以通过卫星进行通信,而不管他们的位置. 否则,只有两 ...

  3. MySQL之正则表达式

    一.介绍 正则表达式用来描述或者匹配符合规则的字符串.它的用法和like比较相似,但是它又比like更强大,能够实现一些很特殊的规则匹配:正则表达式需要使用REGEXP命令,匹配上返回"1& ...

  4. ***PHP5.6.x SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 解决方案

    centos: 在php.ini中增加一行 1 openssl.cafile=/etc/pki/tls/certs/ca-bundle.crt 重启服务器使修改生效

  5. 用tomcat配置https自签名证书,解决 ios7.1以上系统, 苹果inHouse发布

    用tomcat配置https自签名证书,解决 ios7.1以上系统苹果inHouse发布不能下载安装的问题教程,话说,我其实最讨厌配置某某环境了,因为某一个小环节一旦出错,你的所有工作往往会功亏一篑, ...

  6. for循环练习题(共六道题)

    第一题: 假设一个简单的ATM机的取款过程是这样的:首先提示用户输入密码(password),最多只能输入三次,超过3次则提示用户“密码错误,请取卡”结束交易.如果用户密码正确,再提示用户输入取款金额 ...

  7. 【PAT】1003. 我要通过!(20)

    1003. 我要通过!(20) “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. ...

  8. Solr本地服务器搭建及查询

    0.安装solr之前,确保已安装好java8,  java -version 查看是否安装 1.新建本地目录solr1 并 解压两个压缩包文件 .tar.gz .tgz tomcat7 2.将CATA ...

  9. Jenkins hello world

    1. 点击[新建项目],选择如下: (2)点击[流水线],并键入以下图示代码. (3) 点击保存,并[立即构建].

  10. java总结(一)(变量类型)

    java代码运行原理 需要注意 公共类类名必须和文件名相同 一个文件可以有好几个类,编译生成n个类文件名 chcp 65001----utf8 936----GBK 437----美国英语 文档注释必 ...