我正在尝试使用 Quarkus 1.6.1.Final 和 OpenJDK 11 使用存储库模式解决依赖注入(inject)。
我想用接口(interface)实现注入(inject)并给他们一些参数(如 @Named
或 @Qualifier
)以指定具体类,但目前我有 UnsatisfiedResolutionException
并且不知道如何解决它。
这是我的代码部分。
用例类:
@ApplicationScoped
public class ProductStockCheckUseCase {
@Inject
@Named("dummy")
ProductStockRepository repo;
public int checkProductStock() {
ProductStock stock = repo.findBy("");
return stock.getCount();
}
}
存储库接口(interface):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]
你有任何想法如何解决这个问题吗?还是实现这种接口(interface)注入(inject)并使用参数/注释指定具体类是错误的想法?我已阅读并尝试过以下文章:
一些官方文档:
其他博客和 SO:
最佳答案
我的猜测是您需要在 ProductStockDummyRepository
中添加范围注释。 .可能是 @Singleton
或 @ApplicationScoped
.
关于java - 在 Quarkus 中使用 @Inject 和接口(interface)进行依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63412802/