[英]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.