ASP.NET Core 5 MVC中ConfigureServices与Startup类去向问题
ASP.NET Core 5 中 Startup 类与 ConfigureServices 方法去哪了?
这是ASP.NET Core 5引入的最小托管模型,微软对项目启动流程做了简化,把原Startup类里的两部分核心逻辑直接整合到了Program.cs的Main方法中:
原 ConfigureServices 方法的替代
原ConfigureServices中注册服务的逻辑,现在通过WebApplication.CreateBuilder(args)返回的builder.Services来实现。你代码里的这些部分就是对应原ConfigureServices的功能:
// Add services to the container. var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found."); builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString)); builder.Services.AddDatabaseDeveloperPageExceptionFilter(); builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); builder.Services.AddRazorPages();
原 Configure 方法的替代
原Configure中配置HTTP请求管道的逻辑,现在在builder.Build()得到app实例后执行。你代码里的这些部分对应原Configure的功能:
// Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseMigrationsEndPoint(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages();
如果偏好传统的Startup类结构,你可以手动创建Startup类并保留ConfigureServices和Configure方法,然后在Program.cs中修改为:
var builder = WebApplication.CreateBuilder(args); builder.UseStartup<Startup>(); var app = builder.Build(); app.Run();
你的完整启动代码如下:
public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // Add services to the container. var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found."); builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString)); builder.Services.AddDatabaseDeveloperPageExceptionFilter(); builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); builder.Services.AddRazorPages(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseMigrationsEndPoint(); } else { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages(); app.Run(); } }
内容的提问来源于stack exchange,提问作者Yoda
相关产品推荐
相关产品推荐

