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

跨项目DI实现:如何在项目B中使用项目A的IWorker?

解决方案

直接在项目B中仅注册IWorker和Worker不可行,因为Worker的构造函数依赖IDependency,DI容器实例化Worker时找不到对应实现,会抛出依赖缺失的异常。以下是几种可行的正确实现方式:

1. 项目A提供统一注册扩展方法

在项目A中封装一个扩展方法,打包IWorker及其所有依赖的注册逻辑,项目B只需调用该方法即可完成全部必要注册:

// 项目A中定义扩展方法
public static class WorkerServiceExtensions
{
    public static IServiceCollection AddWorkerServices(this IServiceCollection services)
    {
        services.AddScoped<IDependency, SimpleDependency>();
        services.AddScoped<IWorker, Worker>();
        // 其他相关依赖的注册也可在此添加
        return services;
    }
}

项目B中调用:

services.AddWorkerServices();

这种方式让项目B无需关心IWorker的内部依赖细节,仅需一行代码完成注册。

2. 用工厂模式封装IWorker的创建

在项目A中实现一个工厂类,负责创建IWorker实例,项目B仅依赖工厂接口和IWorker接口:

// 项目A中定义工厂接口与实现
public interface IWorkerFactory
{
    IWorker CreateWorker();
}

public class WorkerFactory : IWorkerFactory
{
    private readonly IDependency _dependency;

    public WorkerFactory(IDependency dependency)
    {
        _dependency = dependency;
    }

    public IWorker CreateWorker()
    {
        return new Worker(_dependency);
    }
}

项目A中注册工厂:

services.AddScoped<IDependency, SimpleDependency>();
services.AddScoped<IWorkerFactory, WorkerFactory>();

项目B中使用:

public class SomeService 
{
    private readonly IWorker _worker;

    public SomeService(IWorkerFactory workerFactory) 
    {
        _worker = workerFactory.CreateWorker();
    }
}

项目B只需注册工厂(或通过项目A的扩展方法注册),无需接触Worker的底层依赖。

3. 测试场景下使用Mock依赖

如果项目B是测试项目,可借助Mock框架(如Moq)模拟IDependency,手动创建Worker实例:

// 项目B测试代码
var mockDependency = new Mock<IDependency>();
// 配置Mock行为
mockDependency.Setup(d => d.SomeMethod()).Verifiable();

var worker = new Worker(mockDependency.Object);
var someService = new SomeService(worker);

这种方式无需DI注册,适合快速验证SomeService与IWorker的交互逻辑。

4. 将IWorker封装为独立服务边界

若要彻底隔离IWorker的内部依赖,可将Worker及其依赖封装为独立服务(如gRPC、REST API),项目B通过调用外部服务来使用IWorker功能,而非直接依赖接口和实现类。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:31:02