DncZeus实战开源项目(三)配置篇
配置篇(Program.cs和Startup.cs的分工)
使用 Startup.cs 的好处
1. 关注点分离 (Separation of Concerns)
// Program.cs - 只负责应用程序启动和主机配置
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
// Startup.cs - 负责依赖注入和中间件配置
public class Startup
{
public void ConfigureServices(IServiceCollection services) { ... }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ... }
}
2. 代码组织更清晰
- Program.cs: 应用程序入口点,配置主机
- Startup.cs:
ConfigureServices(): 配置依赖注入Configure(): 配置HTTP请求管道
3. 便于单元测试
可以单独测试 Startup 类中的配置逻辑,而不需要启动整个应用程序。
4. 向后兼容性
这个模式从 .NET Core 1.0 开始就存在,很多现有项目都采用这种方式。
现代 .NET 项目 vs 传统方式
现代方式 (.NET 6+ 推荐的 Minimal API)
// Program.cs - 所有配置都在一个文件中
var builder = WebApplication.CreateBuilder(args);
// 服务注册
builder.Services.AddControllers();
builder.Services.AddDbContext<DncZeusDbContext>(...);
var app = builder.Build();
// 中间件配置
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
传统方式 (本项目使用的)
// Program.cs - 简洁的启动逻辑
CreateWebHostBuilder(args).Build().Run();
// Startup.cs - 详细的配置逻辑
public void ConfigureServices(IServiceCollection services) { ... }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ... }
为什么这个项目还用 Startup.cs?
- 历史原因: 项目可能早期创建,从旧版本 .NET Core 升级而来
- 复杂配置需求: 项目配置较为复杂(JWT、多数据库、Swagger、CORS等),分离后更易维护
- 团队习惯: 开发团队可能更熟悉传统的配置方式
- 兼容性考虑: 保持与现有代码和教程的一致性
总结
虽然现代 .NET 6+ 推荐使用 Minimal API 模式(所有配置在 Program.cs),但使用 Startup.cs 仍然是完全有效的选择,特别是在以下场景:
- 配置逻辑复杂的大型项目
- 需要清晰代码组织的团队项目
- 从旧版本升级的现有项目
- 需要独立测试配置逻辑的项目
这种"老派"的方式在现代开发中仍然有其价值和合理性。

浙公网安备 33010602011771号