簡體   English   中英

在 Quarkus 中使用 @Inject 和接口進行依賴注入

[英]Dependency injection with @Inject and Interface in Quarkus

我正在嘗試使用 Quarkus 1.6.1.Final 和 OpenJDK 11 使用 Repository Pattern 解決依賴注入。我想實現 Inject with Interface 並給他們一些參數(如@Named@Qualifier )以指定具體的 class,但目前我有UnsatisfiedResolutionException並且不知道如何解決它。

這是我的代碼部分。

用例 class:

@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]

你有任何想法如何解決這個問題嗎? 還是實現這種接口注入並使用參數/注釋指定具體的 class 是錯誤的想法?

我已閱讀並嘗試過以下文章:

一些官方文檔:

其他博客和 SO:

我的猜測是您需要在ProductStockDummyRepository添加一個 scope 注釋。 可能是@Singleton@ApplicationScoped

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM