簡體   English   中英

使用Guice多次綁定到同一提供者實例

[英]Multiple bindings to the same provider instance with Guice

我有兩個接口A和B,而B正在擴展A。

我有一個提供程序,可以提供其類正在實現B(因此實現A)的實例。

我想在單例范圍內將Provider綁定到B.class(直接)和帶有注釋的A.class。

bind(B.class).toProvider(MyBImplProvider.class).in(Scopes.SINGLETON);
bind(A.class).annotatedWith(Names.named("B")).toProvider(MyBImplProvider.class).in(Scopes.SINGLETON);

無論我是通過B.class還是通過A.class + Annotation注入的,如何從提供者返回相同的實例。 例如,我希望能夠將構造函數定義為

@Inject
C(B param)

要么

@Inject
C(@Named("B") param)

在這兩種情況下,我都希望對param進行相同的單例評估。

如何使您的A提供者取決於您在上面定義的B提供者?

@Provides 
@Named("B")
A provideA(Provider<B> bProvider) {
  return bProvider.get();
}

這應該起作用,因為您說過B擴展了A。您可能需要使用@Named位。

另一種選擇是使用toInstance(yourObject)綁定。 但這使將任何依賴項注入該對象變得混亂。 您將必須使用Binder#requestInjection()

暫無
暫無

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

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