簡體   English   中英

Guice CreationException - 沒有綁定 Foo 類型的實現

[英]Guice CreationException - No implementation for type Foo was bound

需要一些幫助來理解這個錯誤以及解決它的可能方法。

所以我有一個這樣的類型:

class Foo {
   static final class Bar {}

   @Inject
   Foo(TypeA a, @Nullable Set<Bar> b) {}
}

為了使 Foo 可注入,我需要滿足參數 a 和 b 的依賴關系,現在我提供 Type a 實現沒有問題,它不是 null,所以我在包模塊 class 中有一個 @Provides 方法。 但是b呢? 它是可空的,如何編寫帶有可以為空的參數的@Provides? 我的猜測是它不應該是必需的,Guice 應該理解注釋......但是有些東西不正常,我收到了這個錯誤:

1) 未綁定java.util.Set<Foo$Bar>的實現。

這是@Provides 方法(在atm 中不起作用)

@Provides @Nullable
public Foo provideFoo(TypeA a, @Nullable Set<Foo.Bar> b) {
    return new Foo(a, b);
}

我知道嵌套的 class 不是公共的,也不是構造函數,所以也許 guice 無法訪問它,但即使我將它們全部公開(我並不真正想要),錯誤仍然存在......我錯過了什么?

沒有任何Set<Bar>綁定和具有Set<Bar>綁定null

您需要一個返回Set<Bar> (可能是null )或類似bind(Bar.class).toProvider(Providers.ofInstance(null))@Provides方法,以便能夠提供第二個參數到Foo的構造函數。

另請注意,您的Foo@Provides方法只是直接調用@Inject帶注釋的構造函數,因此根本沒有必要。 我還要說最好綁定到一個空的Set<Bar>而不是null

暫無
暫無

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

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