You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core顶级语句中调用自定义类方法的实现方式

在顶级语句中调用RestaurantSeeder的Seed()方法

1. 完成DI注册

先确认你已经把RestaurantSeeder注册到DI容器里,根据业务需求选择合适的生命周期(瞬态/作用域/单例):

var builder = WebApplication.CreateBuilder(args);

// 这里以瞬态为例,可根据实际替换成AddScoped或AddSingleton
builder.Services.AddTransient<RestaurantSeeder>();

// 其他常规配置,比如添加Controllers
builder.Services.AddControllers();

2. 构建应用后调用Seed方法

在builder.Build()得到WebApplication实例后,通过创建服务作用域来获取RestaurantSeeder实例并执行Seed():

var app = builder.Build();

// 创建服务作用域,用于解析作用域/瞬态服务
using var scope = app.Services.CreateScope();
var serviceProvider = scope.ServiceProvider;

try
{
    // 从容器中取出RestaurantSeeder
    var seeder = serviceProvider.GetRequiredService<RestaurantSeeder>();
    // 调用Seed方法,如果是异步方法就用await seeder.SeedAsync()
    seeder.Seed();
}
catch (Exception ex)
{
    // 异常处理,比如打日志
    var logger = serviceProvider.GetRequiredService<ILogger<Program>>();
    logger.LogError(ex, "执行种子数据时出错");
}

// 后续中间件配置
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

为什么要用服务作用域?

如果RestaurantSeeder依赖了作用域生命周期的服务(比如EF Core的DbContext),直接从根服务提供者解析会导致服务无法正确释放,用作用域能保证这些依赖服务的生命周期正常管理。

内容的提问来源于stack exchange,提问作者BartTux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:10:36