【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 为你的应用程序提供 ...
随机推荐
- 网站用户行为分析——在Ubuntu下安装MySQL及其常用操作
安装MySQL 使用以下命令即可进行mysql安装,注意安装前先更新一下软件源以获得最新版本: sudo apt-get update #更新软件源 sudo apt-get install mysq ...
- usb之鼠标作为按键输入
1. 首先搞清楚,鼠标点左键.右键等能得到什么数据,然后分析这些数据上报事件即可. 第一个基本点:usb_alloc_urb函数,创建一个struct urb结构体,只能使用这个函数来创建,它是urb ...
- python学习笔记:第17天 面向对象03 类与类之间的关系
一.类与类之间的依赖关系 ⼤千世界, 万物之间皆有规则和规律. 我们的类和对象是对⼤千世界中的所有事物进⾏归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在⾯向对象的世界中. 类与类 ...
- avast:中兴手机预装恶意软件 嵌入固件底层
著名安全机构 avast 发布报告称,旗下安全威胁实验室发现,中兴.爱可视.MyPhone 等厂商的多款安卓手机居然预装了恶意广告软件.该恶意软件被命名为“ Cosiloon ”,它会在用户使用浏览器 ...
- Python 1.1数字与字符基础
一. 基础数字操作 1.加减乘除以及内置函数: min(), max(), sum(), abs(), len() math库: math.pi math.e, math.si ...
- Linux 中的权限
ABCD A-0, 十进制 B-user(u, 用户) C-group(g, 组用户) D-others(o, 其他用户) +-----+---+--------------------------+ ...
- HttpClient&Jsoup爬虫的简单应用
详细的介绍已经有很多前辈总结,引用一下该篇文章:https://blog.csdn.net/zhuwukai/article/details/78644484 下面是一个代码的示例: package ...
- php webservice 可能存在的坑
场景: 今天在生产机器上调用webservice失败 报 ...failed to load external entity... wget一下地址发现报500错误 把wsdl去掉再wget 发现就 ...
- Python常见的脚本汇总
1.冒泡排序 lis = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58] def sortport(): for i in range(len(lis)-1 ...
- JAVA基础学习之路(七)对象数组的定义及使用
两种定义方式: 1.动态初始化: 定义并开辟数组:类名称 对象数组名[] = new 类名称[长度] 分布按成:类名称 对象数组名[] = null: 对象数组名 = new 类名称[长度]: 2 ...