您的位置:首页 > 编程语言 > ASP

ASP.NET Core 应用程序Startup类介绍

2017-11-16 16:31 846 查看
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://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: