更改对代理的绑定

Change a binding to a proxy

我创建了一个代理 class 使用 APT(注释处理器)在原始 class 中做一些检测。

当实现 class 使用 @MyCustomAnnotation 注释时,我想使用此代理而不是默认实现更改 Dagger 2 中的绑定。

实施(由用户):

@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();
  }
}

我需要从用户角度来看透明的东西。

你们有什么建议?

好吧,我最终使用了@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);
}