2017-08-31 22 views
1

我剛剛瞭解到依賴注入(DI),我開始喜歡它。爲了注入依賴關係,我使用了Google Guice框架。一切都運行良好,但在編寫模塊時,我想到如果我的模塊需要依賴作爲構造函數,畢竟它只是一個擴展AbstractModule的類。因此,基本上,我有3個模塊作爲一個整體。如何注入依賴關係,如果你的模塊本身將參數作爲構造函數?

  • 環境模塊

    public class EnvModule extends AbstractModule { 
         @Override 
         protected void configure() { 
         install(new Servicemodule()); 
        } 
    } 
    
  • ServiceModule

    public class ServiceModule extends AbstractModule { 
        private final boolean isEnabled; 
        @Override 
        protected void configure() { 
        if (isEnabled) { 
        install (new ThirdModule()); 
        } 
    } 
    
    • ThirdModule(它不採取任何構造的任何參數,並具有自己的一些綁定)

基本上,服務模塊中的變量定義了我的應用程序是否需要安裝第三個模塊。該變量在應用程序配置文件中定義。那麼如何在ServiceModule中注入該變量?由於該字段是最終的,setter注入是不可能的,有沒有辦法使用施工注入或現場注入來注入值。

+0

您可以在Module類中擁有自己的參數化構造函數並傳入布爾值。 –

回答

2

我看到如下選項:

  • 使用系統變量:

    ServiceModule() {isEnabled = System.getProperty("isThirdModuleEnabled")};

  • 讀取配置文件直接在ServiceModule()構造
  • 使用@Provides:

    class ServiceModule ... { @Provide @Singleton ThirdModuleParam getThirdModuleParam(...) { //read the config file ThirdModuleParam res = new ThirdModuleParam(); res.setIsEnabed(...); return res; } } class ThirdModule { @Provide SomeThirdModuleClass getIt(ThirdModuleParam param) { return param.isEnabled() ? new SomeThirdModuleClass() : null; }

相關問題