这篇文章简单记录 ASP.NET Core中 ,startup类的一些使用。
一.前言
在 Startup类中,一般有两个方法:
ConfigureServices 方法: 用来配置应用的 service 。
Configure 方法:创建应用的请求处理管道
它们都在应用启动时,被ASP.NET Core runtime 调用:
当应用的 host 被built(建立)时,Startup类被指定到应用中。
而在 Program 中,当 host builder 上的 Build 被调用时,应用的 host 被 built 。
而Startup类是通过调用WebHostBuilderExtensions.UseStartup<TStartup>方法指定的。
在startup类中,一种依赖注入的常见用法:
IHostingEnvironment : 根据enviironment (环境) 配置 services .
IConfiguration : 读取配置
ILoggerFactory : 在Startup.ConfigureServices中创建 logger .
注入IHostingEnvironment , 当定义不同环境的Startup (例如,StartupDevelopment 等),在运行时,选择合适的Startup。
二.ConfigureServices方法
它有三个特点:
可选的
在调用Configure方法之前调用 ConfigureServices
Configuration options 按约定设置
1. 比较典型的是调用 Add{Service} 和 services.Configure{Service} 。例如:Configure Identity services.
2. host 可能会 在Startup方法被调用之前,配置一些服务。例如:The host.
在startup被调用之前,CreateDefaultBuilder方法配置了一个host 。
3. Add{Service}是IServiceCollection的扩展方法,下面是一些使用:
添加 services 到 service container 使它们在应用和Configure方法中可用。services方法可以通过 dependency injection 或 ApplicationServices 解析。
三.The Configure method
Configure方法用来指定应用怎样 处理HTTP request。请求管道(request pipeline)通过添加中间组件到IApplicationBuilder实例中来配置。
ASP.NET Core 模板 配置的管道:
Developer Exception Page
Exception handler
HTTP Strict Transport Security (HSTS)
HTTPS redirection
Static files
General Data Protection Regulation (GDPR)
ASP.NET Core MVC and Razor Pages
使用Use扩展方法添加一个或多个中间组件到请求管道。例如,UseMvc扩展方法添加 Routing Middleware 到请求管道 并且配置MVC 作为一个默认的处理器。
四.Convenience methods
不使用Startup类配置services和request processing pipeline。在host builder 上调用ConfigureServices和Configure的简便方法。如果存在多个ConfigureServices的调用,会依次添加。如果存在多个Configure方法的调用,最后一个Configure的调用会被使用。
五.Extend Startup with startup filters (使用startup filter扩展 Startup)
使用 IStartupFilter ,在应用的Configure 中间件管道的开头或末尾配置中间件。
IStartupFilter 实现Configure方法,它会接收和返回一个Action<IApplicationBuilder>。而IApplicationBuilder定义了一个类来配置一个应用的请求管道。
这些filters会按照添加到services container的顺序被调用。
下面是一个例子:
RequestSetOptionsMiddleware
RequestSetOptionsMiddleware 中间件被配置在 RequestSetOptionsStartupFilter 类中:
IStartupFilter 在 ConfigureServices中被注册到 service container, 并且从Startup类的外部增强Startup:
当option的查询字符串存在时,中间件会在MVC中间件之前处理这个值
中间件的执行顺序是按照IStartupFilter的注册顺序
六. 补充
这里晚上补充下 ApplicationServices 解析services的使用
参考网址:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.2
原文地址:https://www.cnblogs.com/Vincent-yuan/p/11105523.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com