【APS.NET Core】- 应用程序Startup类介绍
转自:https://www.cnblogs.com/stulzq/p/7845026.html
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:
public class Startup
{
public Startup(IConfiguration config)
{
Configuration = config;
Console.WriteLine("使用了启动类:Startup");
}
}
StartupDevelopment:
public class StartupDevelopment
{
public StartupDevelopment(IConfiguration config)
{
Configuration = config;
Console.WriteLine("使用了启动类:StartupDevelopment");
}
}
然后在Program
类中设置启动程序集名称
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
} public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args).UseStartup("WebApplication4").Build();
}
}
我们通过修改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
也可以在方法签名中指定,在这种情况下,如果这些服务可用,将被注入。
【APS.NET Core】- 应用程序Startup类介绍的更多相关文章
- 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 系列 2 启动Startup类介绍
一.Startup类 ASP.NET Core 应用是一个控制台应用,它在其 Program.Main 方法中创建 Web 服务器.其中Main方法是应用的托管入口点,Main 方法调用 WebHos ...
- ASP.NET Core中的Startup类
ASP.NET Core程序要求有一个启动类.按照惯例,启动类的名字是 "Startup" .Startup类负责配置请求管道,处理应用程序的所有请求.你可以指定在Main方法中使 ...
- (1)ASP.NET Core 应用启动Startup类简介
1.前言 Core与早期版本的 ASP.NET 对比,配置应用程序的方式的 Global.asax.FilterConfig.cs和RouteConfig.cs 都被Program.cs 和 Star ...
- ASP.NET Core Startup类 Configure()方法 | ASP.NET Core 中间件详细说明
ASP.NET Core 程序启动过程如下 目录 Startup 类 Configure() 方法 中间件 使用中间件 Configure 方法 的参数 IApplicationBuilder Ext ...
- ASP.Net Core 5.0 MVC 配置文件读取,Startup 类中ConfigureServices 方法、Configure 方法的使用
配置文件读取 1. 新建FirstController控制器 在appsettings文件内容替换成以下代码 { "Position": { "Title": ...
- NET CORE 应用程序启动
原文:Application Startup作者:Steve Smith翻译:刘怡(AlexLEWIS)校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程序提供 ...
随机推荐
- Hadoop mapreduce框架简介
传统hadoop MapReduce架构(老架构) 从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路: 1.首先用户程序 (JobClient) 提交了一个 job,job ...
- usb之鼠标作为按键输入
1. 首先搞清楚,鼠标点左键.右键等能得到什么数据,然后分析这些数据上报事件即可. 第一个基本点:usb_alloc_urb函数,创建一个struct urb结构体,只能使用这个函数来创建,它是urb ...
- python3 练习题100例 (一)
断断续续的学了很久的python,有很多又忘记了.从今天开始用实例再进行一次学习,并记录.本人小白一个,请大家多多指教. #!/usr/bin/env python3 # -*- coding: ut ...
- Python学习手册之字符类和元字符深入
在上一篇文章中,我们介绍了 Python 的正则表达式和元字符,现在我们介绍 Python 的字符类和对元字符进行深入讲解.查看上一篇文章请点击:https://www.cnblogs.com/dus ...
- Python 爬虫 (三)
#对第一章的百度翻译封装的函数进行更新 1 from urllib import request, parse from urllib.error import HTTPError, URLError ...
- vim 粘贴文本,格式混乱 tab
粘贴的代码如上.修改方法: 方法一: set paste 贴完后,设置 set nopaste 恢复代码缩进. 方法二:修改配置文件 vim /etc/vim/vimrc set pastetoggl ...
- HDOJ:6333-Problem B. Harvest of Apples(组合数学+莫队算法+逆元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6333 解题心得: 这个题可以说是十分精彩了,首先推组合数学的公式,其中一个很重要的公式是Cnm = C ...
- 利用cross-entropy cost代替quadratic cost来获得更好的收敛
1.从方差代价函数说起(Quadratic cost) 代价函数经常用方差代价函数(即采用均方误差MSE),比如对于一个神经元(单输入单输出,sigmoid函数),定义其代价函数为: 其中y是我们期望 ...
- mybatis入门(三):mybatis的基础特性
mybatis的知识点: 1.mybatis和hibernate本质区别和应用场景 hibernate:是一个标准的ORM框架(Ojbect relation mapper对象关系映射).入门门槛较高 ...
- Centos7 下安装以及使用mssql
Centos7下安装以及使用Mssql,在这下面玩,主要是发现linux环境下的mysql非常的小,小到只有169M,这在windows上面,动撤几个G的安装文件,会让你直接打消使用MSSQL的勇气, ...