跳到主要内容
版本:3.0.0

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、初始化器或自定义中间件

如果你只是想先跑通第一版,还是先按 快速开始 走,够用了再回来看这里。