Net core学习系列(五)——Net Core应用程序Startup类介绍
一、Startup 类
ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup
。在主程序的Web Host生成器(WebHostBuilderExtensions)的 UseStartup <TStartup>
扩展方法中指定启动类名称。
您可以为不同的环境定义不同的Startup
类,并在运行时选择适当的Startup
类。如果在Web Host配置或选项中指定startupAssembly
(启动程序集),托管将加载该启动程序集并搜索 Startup 或 Startup[Environment] 类型。根据名称后缀匹配当前环境的类将被优先使用,所以如果应用程序在开发环境中运行,并包含一个Startup
和一个StartupDevelopment
类,他将使用StartupDevelopment
类。
通俗的讲,ASP.NET Core应用程序启动的时候将会根据当前的运行环境(生产环境(Production)或者开发环境(Development))自动选择启动类。比如在一个ASP.NET Core应用程序中,具有两个启动类
Startup
和StartupDevelopment
,那么当我们的启动环境设置为开发环境的时候,启动时将会搜索启动程序集,优先使用StartupDevelopment
这个带有Development后缀的启动类。
我们来验证一下!
建立两个启动类Startup
和StartupDevelopment
,我们分别在这两个类的构造方法中打上标记以便于我们区分使用了哪个启动类。
Startup:
StartupDevelopment:
然后在Program
类中设置启动程序集名称
我们通过修改launchSettings.json
里的环境配置来切换环境:
我们可以看到当我们使用开发环境的时候使用的确实是StartupDevelopment
启动类。
我们也可以通过调用UseStartup<TStartup>
来定义一个固定的Startup类,该类将被使用而不考虑环境。 这是推荐的方法。
Startup
类构造方法可以接受通过依赖注入提供的依赖性。 常用的方法是使用IHostingEnvironment
来设置配置源。
Startup类必须包含Configure
方法,并可以选择包含ConfigureServices
方法,这两个方法在应用程序启动时调用。 该类还可以包含这些方法的特定于环境的版本。 ConfigureServices
(如果存在)在Configure
之前调用。
Configure
方法主要是配置ASP.NET Core的中间件,相当于我们在ASP.NET中所说的管道,ConfigureServices
主要是配置依赖注入(DI)。
ConfigureServices 方法
ConfigureServices
方法是可选的; 但是如果使用的话,它会在WebHost的Configure
方法之前被调用。 WebHost可能会在调用启动方法之前配置一些服务。 按照惯例,在这个方法中设置配置选项。
对于需要大量设置的功能,在IServiceCollection
上添加Add[Service]
扩展方法。 下面示例将应用程序配置为使用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>();
}
将服务添加到服务容器使得它们可以通过依赖注入在应用程序中使用(http://www.cnblogs.com/stulzq/p/7761128.html)。
在启动时可用的服务
ASP.NET Core依赖注入在应用程序启动期间提供服务。 您可以通过在Startup
类的构造方法或其Configure
方法中包含适当的接口作为参数来请求这些服务。 ConfigureServices
方法只接受一个IServiceCollection
参数(但是可以从这个集合中检索任何已注册的服务,所以不需要额外的参数)。
下面是一些通常由启动方法请求的服务:
在构造方法中:
IHostingEnvironment
,ILogger<Startup>
在
ConfigureServices
方法中:IServiceCollection
在
Configure
方法中:IApplicationBuilder
,IHostingEnvironment
,ILoggerFactory
Startup
类构造方法或其Configure
方法可以请求由WebHostBuilder ConfigureServices
方法添加的任何服务。 使用WebHostBuilder
在启动方法中提供您需要的任何服务。
Configure 方法
Configure
方法用于指定ASP.NET应用程序如何响应HTTP请求。 通过将中间件组件添加到由依赖注入提供的IApplicationBuilder
实例来配置请求管道。
从下面的例子中,我们使用了几个扩展方法来配置支持BrowserLink,error pages, static files, 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(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
每个Use
扩展方法将一个中间件组件添加到请求管道。 例如,UseMvc
扩展方法将路由中间件添加到请求管道,并将MVC配置为默认处理程序。
有关如何使用IApplicationBuilder的更多信息,请参阅中间件。
额外的服务,如IHostingEnvironment
和ILoggerFactory
也可以在方法签名中指定,在这种情况下,如果这些服务可用,将被注入。
参考资料:https://www.cnblogs.com/stulzq/p/7845026.html
Net core学习系列(五)——Net Core应用程序Startup类介绍的更多相关文章
- 【.Net Core 学习系列】-- EF Core 实践(Code First)
一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二解决方案: 新建项目: File --> New --> Project --> ...
- 【.Net Core 学习系列】-- EF Core实践(DB First)
一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二.准备数据: CREATE DATABASE [Blogging]; GO USE [Blogging ...
- 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 ...
- 【APS.NET Core】- 应用程序Startup类介绍
转自:https://www.cnblogs.com/stulzq/p/7845026.html Startup类配置服务和应用程序的请求管道. Startup 类 ASP.NET Core应用程序需 ...
- EntityFramework Core 学习系列(一)Creating Model
EntityFramework Core 学习系列(一)Creating Model Getting Started 使用Command Line 来添加 Package dotnet add pa ...
- scrapy爬虫学习系列五:图片的抓取和下载
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- ASP.NET Core学习系列
.NET Core ASP.NET Core ASP.NET Core学习之一 入门简介 ASP.NET Core学习之二 菜鸟踩坑 ASP.NET Core学习之三 NLog日志 ASP.NET C ...
- Net core学习系列(一)——Net Core介绍
一.什么是Net Core .NET Core是适用于 windows.linux 和 macos 操作系统的免费.开源托管的计算机软件框架,是微软开发的第一个官方版本,具有跨平台 (Windows. ...
随机推荐
- 纯css更改图片颜色的技巧
tips: JPG.PNG.GIF 都可以,但是有一个前提要求,就是黑色纯色,背景白色 .pic1 { background-image: url($img), linear-gradient ...
- 英文FRAUNCE法国FRAUNCE单词
France Alternative forms Fraunce In Fraunce, the inhabitants of one city were driven out and forced ...
- 纽约LangeEylandt长岛LongIsland
LangeEylandt n.长岛(美国) 纽约长岛 纽约长岛 (LongIsland)是北美洲在大西洋内的一个岛,最早追溯到十七世纪的1650年被命名为Lange Eylandt [1] ,位于北美 ...
- 电缆公司如何面对企业改革?MES系统打造智能工厂
项目背景 目前,“互联网+电缆”正在成为电缆行业发展的主流,作为中国领先的大型电缆企业江苏亨通电力电缆有限公司(简称“亨通电缆”)积极响应国家提出的“中国制造2025”号召,实施MES工程项目,启用智 ...
- MySQL--使用mysqldump进行数据库版本升级
在MySQL跨版本升级时,建议使用mysqldump方式导出用户权限和用户数据,即使是小版本升级,导出过程中也应忽略系统数据库,避免系统表不兼容. 导出用户数据库脚本和用户创建脚本 ##======= ...
- Flask入门很轻松 (二)
转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959454.html 请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比 ...
- Sonar中的坏习惯详解
22种代码的坏味道,一句话概括: 如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹. 正如食物要腐坏之前,经常会发出一些异味一样. 我们管这些痕迹叫做“代码异味”. 参考资料 ...
- Spring容器、BeanFactory和ApplicationContext,及3种装配Bean的方式
目录 一. spring容器理解 二. BeanFactory和ApplicationContext之间的关系 三. BeanFactory详情介绍 四.ApplicationContext介绍 五. ...
- 关于微信小程序在ios中无法调起摄像头问题
这几天关于微信小程序开发关于wx.chooseVideo组件问题,因为自己一直是安卓手机上测试,可以调取摄像头,但是应用在ios上无法打开摄像头,困扰了好多天,经过反复查看官方文档,今天总算修复了这个 ...
- python获取参数列表
def f(a=1, b=2, c=3): print(locals())#在函数内获取 #使用inspect模块,简单方便 python2.7: import inspectinspect.geta ...