簡體   English   中英

如何將生成的實現添加到Dagger依賴圖?

[英]How to add generated implementation to Dagger Dependency Graph?

我有一個界面

public interface SomeInterface { 
  void test(); 
}

和產生的實現注釋處理器SomeInterface稱為SomeInterfaceImpl

為了通過Dagger依賴注入使這種類型可用,我將創建以下內容:

@Component(modules = {ApplicationModule.class})
@Singleton
public interface ApplicationComponent {    
    SomeInterface getSomeInterface();       
}

@Module
public class ApplicationModule {

    @Provides
    @Singleton
    SomeInterface provideSomeInterface() {
        return new SomeInterfaceImpl();
    }
}

問題是我無法在ApplicationModule中使用SomeInterfaceImpl ,因為它尚不可用,並且將由注釋處理器生成。

如何擴展注釋處理器,以便可以將SomeInterface用於Dagger依賴項注入,並且生成的實現SomeInterfaceImpl將得到正確解析?

編輯:

該示例有效,但我想使用另一個注釋處理器創建ApplicationModule,並讓該處理器以某種方式將ApplicationModule集成到匕首圖中。 @Component(modules = {ApplicationModule.class})將不存在,因為我不知道在代碼中將生成ApplicationModule。 有沒有辦法將生成的@Module類集成到Dagger Graph中? 請注意,我不想猜測將生成ABCModule並將其添加到@Component。 我希望這會以某種方式自動發生。

只要注釋都在同一個javac調用中,並且只要最終在一個處理器回合中最終生成您的類,Dagger就應將嘗試使用該符號的時間推遲到下一個回合。

但是,在上述特定情況下,Dagger的處理器甚至不會嘗試直接訪問SomeInterfaceImpl ,因為它位於@Provides方法的主體內,並且注釋處理器不能(通過公共API)訪問方法主體的內容。 因此Dagger甚至都不在乎是否SomeInterfaceImpl生成SomeInterfaceImpl但是,如果您沒有在上一輪之前生成Dagger生成的代碼可能不會編譯(模塊本身也不會編譯)。

暫無
暫無

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

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