public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
其实这里还可以支持另外一个接口的注入
public Startup(IConfiguration configuration, IHostEnvironment environment)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
//webApi 相关服务
services.AddControllers();
//尽量使用扩展方法聚合模块,减少Startup的代码量
}
这个方法能够注入使用一切在DI容器配置的服务
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
/api/* //Rest API
/hub/* //SignalR
/rpc/* //GRPC
以上endpoints, 如果使用传统的MVC的中间件,会得到很糟糕的体验(特别深的pipeline,低性能).
剥离Endpoint不仅仅局限于MVC可以让扩展性更好,更好的Url控制
比如以上endpoints拥有各自的授权认证机制,在这种情况下就可以分别处理
在3.0中 IApplicationLifetime
被标记为废弃的, 请使用 IHostApplicationLifetime
public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifetime)
{
lifetime.ApplicationStarted.Register(() => {
//耗时较长的代码,减少WebServer的启动时间
//如果是BackgroundWorker,请使用Worker
});
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}