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

如何在同一解决方案的gRPC与API项目中注册共享服务?

问题解决

错误原因很明确:CreditService的构造函数依赖ICoreService,但你的gRPC项目依赖注入容器中未注册ICoreService的实现类,而API项目中已经完成了该依赖的注册,因此仅gRPC项目启动时会触发此错误。

解决步骤

  1. 添加ICoreService的注册
    在gRPC项目的program.cs中,注册ICreditService之前,先添加ICoreService的注册代码:
builder.Services.AddScoped<ICoreService, CoreService>();
builder.Services.AddScoped<ICreditService, CreditService>();
  1. 补充其他依赖项
    CoreService大概率还依赖其他服务(比如ISmsPanelContext、各类Repository等),你需要把API项目中所有CreditService依赖链上的服务都注册到gRPC项目的DI容器中,否则会出现新的依赖缺失错误。例如至少需要添加:
builder.Services.AddScoped<ISmsPanelContext, SmsPanelContext>();
// 参照API项目中的配置,补充所有CoreService依赖的Repository和服务注册

优化建议

为了避免API和gRPC项目重复编写DI注册代码,可将通用的服务注册逻辑封装成扩展方法,放在一个共享类库中,两个项目直接调用该方法即可:

// 共享类库中的扩展方法
public static class ServiceCollectionExtensions
{
    public static IServiceCollection AddSharedServices(this IServiceCollection services)
    {
        services.AddHttpContextAccessor();
        services.AddScoped<ISmsPanelContext, SmsPanelContext>();
        // 所有通用的Repository和服务注册都放在这里
        services.AddScoped<ICoreService, CoreService>();
        services.AddScoped<ICreditService, CreditService>();
        return services;
    }
}

然后在API和gRPC项目中调用:

// API项目program.cs
builder.Services.AddSharedServices();
// 再添加API特有的服务

// gRPC项目program.cs
builder.Services.AddSharedServices();
// 再添加gRPC特有的服务(比如Grpc相关配置)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:22:45