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

.NET Core 3.1依赖注入如何获取已注册类型的实例

如何在.NET Core 3.1依赖注入中正确获取已注册服务实例

错误原因

ConfigureServices 阶段仅负责收集服务注册信息,依赖注入容器尚未完成构建,此时直接调用容器的实例获取方法(如GetInstance/Resolve)必然执行失败。

正确实现方案

你需要使用服务注册方法的工厂重载,委托框架在容器构建完成、首次需要实例化该服务时,再通过构建完成的IServiceProvider获取依赖。

原生.NET Core DI实现代码

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {    
        // 先注册业务服务,生命周期按需选择Scoped/Singleton/Transient
        services.AddScoped<IBusinessLogic, BusinessLogic>();

        // 使用带IServiceProvider参数的工厂重载,该工厂执行时容器已完成构建
        services.AddSingleton<Func<string, string, JWTCache>>(sp => 
        {
            return (username, password) => new JWTCache(
                userId: username, 
                password: password, 
                businessLogic: sp.GetRequiredService<IBusinessLogic>()
            );
        });
    }
}

额外说明

  • 你原有代码中的Func<string, string>签名有误,按你的业务逻辑返回值为JWTCache,应改为Func<string, string, JWTCache>。
  • 如果你使用第三方DI容器(如Autofac),逻辑完全一致:仅在注册阶段完成注册逻辑,实例获取操作放在工厂委托内,由容器在构建完成后触发执行。
  • 如果需要在Configure方法中直接获取服务,直接将服务声明为Configure的入参即可,宿主会自动完成注入:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IBusinessLogic businessLogic)
{
    // 此处可直接使用注入的businessLogic实例
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:03