簡體   English   中英

如何獲得提供者提供唯一實例的指導?

[英]How to get guice to provide a unique instance with a provider?

我有一個對象A,它執行一些重要的加載。 我為此使用提供商。 我有需要B進行初始化的對象B。 但是,在一個對象CI中,要傳遞A和B,並對其進行適當的准備。

是否有可能讓提供者始終返回相同的實例,或者通過guice模塊來保持提供該實例並就此停止?

編輯:

我在guice網站上有以下解釋,但很少解釋:

@Provides @Singleton
TransactionLog provideTransactionLog() {
  ...
}

是解決方案。 單例適用於提供者還是提供者。 如果適用於提供者,那么解決方案將是保留一個實例,並在每次返回。 但這不適用於Provide方法。 有什么幫助嗎?

Guice的核心非常統一。 在內部,它完全基於提供程序。 鏈接綁定,實例綁定,提供者綁定,即時綁定, @Provides綁定-實際上, @Provides綁定都將始終在@Provides生成提供者。 因此,范圍注釋不能應用於提供程序,只是沒有意義。 范圍始終分配給實際注入的對象,因此可以確保,如果將某些綁定放入@Singleton范圍,則無論此綁定的類型如何,實際注入的對象將始終相同。

因此,這些綁定中的每個綁定始終會為您提供完全相同的唯一對象(當然,您不能將所有這些綁定都放入模塊中;請選擇最喜歡的一個):

bind(SomeDependency.class).to(SomeDependencyImpl.class).in(Singleton.class);

bind(SomeDependency.class).toInstance(new SomeDependencyImpl());

bind(SomeDependency.class).toProvider(() -> new SomeDependencyImpl()).in(Singleton.class);

public class SomeModule extends AbstractModule {
    @Provides @Singleton
    SomeDependency someDependencyImpl() {
        return new SomeDependencyImpl();
    }
}

暫無
暫無

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

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