0

我有一个界面

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

问题是我不能SomeInterfaceImpl在我的 ApplicationModule 中使用 use,因为它还不可用,并且将由注释处理器生成。

如何扩展我的注释处理器,以便我可以使用SomeInterfaceDagger 依赖注入并且生成的实现SomeInterfaceImpl将被正确解析?

编辑:

该示例有效,但我想使用另一个注释处理器创建 ApplicationModule 并让处理器以某种方式将 ApplicationModule 集成到匕首图中。@Component(modules={ApplicationModule.class}) 将不存在,因为我不知道在代码中会生成 ApplicationModule。有没有办法将生成的 @Module 类集成到 Dagger Graph 中?请注意,我不想猜测会生成 ABCModule 并将其添加到 @Component。我希望这会以某种方式自动发生。

4

1 回答 1

0

只要注释都在同一个 javac 调用中,并且只要您最终确实在其中一个处理器轮次中生成了您的类,Dagger 就应该将尝试使用该符号推迟到下一轮。

但是,在您上面提到的特定情况下,Dagger 的处理器甚至不会尝试SomeInterfaceImpl直接访问,因为那是在@Provides方法的主体内,并且注释处理器不能(通过公共 API)访问方法主体的内容。所以 Dagger 甚至不应该关心是否SomeInterfaceImpl及时生成 - 但是如果你在最后一轮之前没有生成,Dagger 生成的代码可能无法编译(模块本身也不会编译)。

于 2015-04-09T03:17:03.417 回答