2016-08-11 54 views
0

我使用APT(註釋處理器)創建代理類,以在原始類中執行一些檢測。更改綁定到代理

我想用此代理更改Dagger 2中的綁定,而不是使用@MyCustomAnnotation註釋實現類時的默認實現。

實現(通過用戶):

@MyCustomAnnotation 
public class MyServiceImpl implements MyService { 
    // Implementation 
} 

原始模塊:

@Module 
public class AppModule { 
    @Provides 
    @Singleton 
    MyService providesService() { 
    return new MyServiceImpl(); 
    } 
} 

最終模塊替換的實現:

@Module 
public class AppModule { 
    @Provides 
    @Singleton 
    MyService providesService() { 
    return new MyServiceImplProxy(); 
    } 
} 

我需要從用戶的角度東西透明。

你們有什麼建議?

回答

0

那麼,我結束了使用@Binds並做了雙重綁定。

改變了用戶模塊的簡單@Binds:

@Module(includes = { OverrideModule.class }) 
public abstract class AppModule { 
    @Binds 
    @Singleton 
    abstract MyService providesMyService(MyServiceImpl impl); 
} 

而且創造了一個重​​寫模塊:

@Module 
public abstract class OverrideModule { 
    @Binds 
abstract MyServiceImpl providesMyServiceImpl(MyServiceImplProxy impl); 
}