博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Core 应用程序Startup类介绍 (转载)
阅读量:5773 次
发布时间:2019-06-18

本文共 3524 字,大约阅读时间需要 11 分钟。

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后缀的启动类。

 

我们来验证一下!

建立两个启动类StartupStartupDevelopment,我们分别在这两个类的构造方法中打上标记以便于我们区分使用了哪个启动类。
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
(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity
() .AddEntityFrameworkStores
() .AddDefaultTokenProviders(); services.AddMvc(); // Add application services. services.AddTransient
(); services.AddTransient
();}

将服务添加到服务容器使得它们可以通过依赖注入在应用程序中使用()。

 

 

在启动时可用的服务


ASP.NET Core依赖注入在应用程序启动期间提供服务。 您可以通过在Startup类的构造方法或其Configure方法中包含适当的接口作为参数来请求这些服务。 ConfigureServices方法只接受一个IServiceCollection参数(但是可以从这个集合中检索任何已注册的依赖注入服务,所以不需要额外的参数,例如如果需要IHostingEnvironment对象时,可以在ConfigureServices方法中调用services.BuildServiceProvider().GetService<IHostingEnvironment>()即可)。

下面是一些通常由启动方法请求的服务:

  • 在构造方法中: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的更多信息,请参阅。

额外的服务,如IHostingEnvironmentILoggerFactory也可以在方法签名中指定,在这种情况下,如果这些服务可用,将被注入。
参考:

 

 

转载地址:http://kpaux.baihongyu.com/

你可能感兴趣的文章
Redis学习手册(内存优化)
查看>>
浅尝TensorFlow on Kubernetes
查看>>
springboot系列十 Spring-Data-Redis
查看>>
excel进行矩阵计算
查看>>
基于Android平台的动态生成控件和动态改变控件位置的方法
查看>>
BOM
查看>>
iOS: Block的循环引用
查看>>
MySQL类型转换
查看>>
变量声明提升1
查看>>
系列文章目录
查看>>
手把手教你如何提高神经网络的性能
查看>>
前端布局原理涉及到的相关概念总结
查看>>
递归调用 VS 循环调用
查看>>
使用sstream读取字符串中的数字(c++)
查看>>
树莓派下实现ngrok自启动
查看>>
javascript静态类型检测工具—Flow
查看>>
MachineLearning-Sklearn——环境搭建
查看>>
node学习之路(二)—— Node.js 连接 MongoDB
查看>>
《深入理解java虚拟机》学习笔记系列——垃圾收集器&内存分配策略
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>