Startup
Startup 这一页讲的是:项目里哪些东西该放在这里,哪些不该放。
在 Aegis 里,Startup 主要负责两件事:
- 补框架默认装配以外的依赖
- 加你自己需要的中间件和启动初始化逻辑
可以直接按一句话理解:
框架能自动装的,不用你再手动装;必须自己补的,就放在这里。
哪些东西通常放在这里
最常见的有:
- 数据库源和仓储
- Redis 源
- 你自己的应用服务
- 自定义中间件
- 启动后的初始化任务
一个最小 Startup 长什么样
最小版本通常像这样:
using Aegis.Configuration;
using Aegis.Core.FreeSql;
using Aegis.Core.Infrastructure;
using Aegis.Webapi.Repository;
namespace Aegis.Webapi.BaseDemo;
public sealed class Startup : ICustomStartup
{
public void ConfigureServices(IServiceCollection services)
{
var connectionString = ConfigManager.Get("PostgreConnection");
services.AddDbSource<AegisDb>(x =>
{
x.ConnectionString = connectionString;
x.DataType = "PostgreSQL";
});
services.AddDbRepositories<AegisDb>();
}
public void Configure(IApplicationBuilder app)
{
}
}
这已经够你把数据库主链路接起来了。
ConfigureServices 里通常做什么
这一段负责往容器里补依赖。
最常见的写法有:
AddDbSource<TDb>()AddDbRepositories<TDb>()AddRedisSource<TRedis>()AddSingleton / AddScoped / AddTransient
这里优先放“应用启动必须知道的东西”,不要把零散业务逻辑塞进来。
Configure 里通常做什么
这一段负责加中间件。
核心原则: 大多数情况下,你完全不需要在这个方法里添加任何中间件! 比如 CORS、Swagger、Authorization 等都应通过
Component.deps.json管理。
唯一的常见例外是,如果你需要提供静态文件服务,可以添加:
app.UseStaticFiles()
避坑提醒(Aegis 路由与控制器): 不要在
Configure方法里手动写app.UseRouting()或app.UseEndpoints(endpoints => endpoints.MapControllers())。 Aegis 框架(AegisApplication.Run(args))内部已经接管并默认处理了控制器路由。手动添加会导致重复注册或路由冲突。
如果某个中间件已经通过 Aegis 组件接管了,就不要在这里再加一遍。
ConfigureInitializer 是什么时候用的
如果你有“应用启动后顺手做一下”的事情,可以放到 ConfigureInitializer 里。
例如:
- 启动时检查数据库连接
- 打印一段初始化日志
- 做一些轻量的预热动作
一个最小示例:
public void ConfigureInitializer(IInitializerContext context)
{
context.AddInitializer<PrintInitializer>();
}
最容易写重的地方
- 已经放进
Component.deps.json的组件,又在Startup里手动注册一遍 - 把数据库配置写进
appsettings.json之外的奇怪位置 - 把业务逻辑写进
Startup - 把所有东西都堆进
ConfigureServices
Startup 的作用是把应用接起来,不是写业务流程。
什么时候来看这页
下面几种情况最适合先看 Startup:
- 你已经按“快速开始”走到了数据库注册这一步
- 你不确定哪些组件是框架自动装、哪些需要自己补
- 你准备加 Redis、初始化器或自定义中间件
如果你只是想先跑通第一版,还是先按 快速开始 走,够用了再回来看这里。