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

.NET 6 Web API中能否在Program类中注入并调用DProvider?

在.NET 6 ASP.NET Web API的Program类内部调用已注册服务的方法是可行的

你当前的代码存在两处问题:一是_dProvide变量未初始化,二是同步的Main方法里不能直接使用await。修正后就能正常调用接口方法,以下是可行的代码示例:

public class Program
{
    // 将Main改为async Task类型以支持异步调用
    public static async Task Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        builder.Services.AddControllers();
        builder.Services.AddSingleton<IDProvider, DProvider>();

        // 从服务容器中获取IDProvider的实例
        using var serviceProvider = builder.Services.BuildServiceProvider();
        var dProvider = serviceProvider.GetRequiredService<IDProvider>();
        var logConnectionString = await dProvider.GetValue("abc");

        // 继续完成Web应用的构建与启动
        var app = builder.Build();

        app.UseAuthorization();
        app.MapControllers();

        await app.RunAsync();
    }
}

需要注意的几个点:

  • 必须把Main方法的签名改为async Task Main,因为你调用的GetValue是异步方法,需要用await等待执行完成。
  • 不能直接使用未初始化的变量,必须通过服务容器的GetRequiredService<IDProvider>()方法获取已注册的服务实例,该方法会在服务未注册时抛出异常,避免空引用问题。
  • 如果你是在Web应用构建完成后(即builder.Build()之后)需要调用服务,也可以通过app.Services来获取实例,效果是一致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:25:20