在Quarkus中使用@Inject和接口进行依赖注入

问题描述

我正在尝试使用Quarkus 1.6.1.Final和OpenJDK 11通过Repository Pattern解决依赖项注入。 我想通过接口实现注入,并给他们一些参数(例如@Named@Qualifier)来指定具体的类,但是目前我有UnsatisfiedResolutionException并不确定如何解决它

这是我的代码部分。

UseCase类:

@ApplicationScoped
public class ProductStockCheckUseCase {
    @Inject
    @Named("dummy")
    ProductStockRepository repo;

    public int checkProductStock() {
        ProductStock stock = repo.findBy("");
        return stock.getCount();
    }
}

存储库接口:

public interface ProductStockRepository {
    public ProductStock findBy(String productId);
}

存储库实施:

@Named("dummy")
public class ProductStockDummyRepository implements ProductStockRepository {

    public ProductStock findBy(final String productId) {
        final ProductStock productStock = new ProductStock();
        return productStock;
    }
}

这是我的build.gradle依赖项的一部分:

dependencies {
    implementation 'io.quarkus:quarkus-resteasy'
    implementation 'io.quarkus:quarkus-arc'
    implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")

    testImplementation 'io.quarkus:quarkus-junit5'
    testImplementation 'io.rest-assured:rest-assured'
}

运行此命令(例如./gradlew assemble./gradlew quarkusDev)时,出现以下错误:

Caused by: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type ProductStockRepository and qualifiers [@Named(value = "dummy")]
        - java member: ProductStockCheckUseCase#repo
        - declared on CLASS bean [types=[ProductStockCheckUseCase,java.lang.Object],qualifiers=[@Default,@Any],target=ProductStockCheckUseCase]

您是否有解决办法?还是实现这种接口注入并使用参数/注释指定具体类是错误的主意?

我已经阅读并尝试了以下文章:

一些官方文档:

其他博客和SO:

解决方法

我的猜测是您需要向ProductStockDummyRepository添加范围注释。可能是@Singleton@ApplicationScoped

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...