我在玩弄试图学习Dagger2。就在我想我得到它时,我似乎陷入了困境。我的应用程序有两个组件,ApplicationComponent(singleton)和StripeComponent(1:1 activity),为了便于阅读,它继承了一个空的接口。为什么Dagger2要求我提供组件不应该提供的东西?
然后它有两个模块,ApplicationModule和StripeModule。
@Singleton @Component(modules = ApplicationModule.class)
public interface ApplicationComponent extends AbstractComponent ...
@PerActivity @Component(modules = { StripeModule.class }) public interface StripeComponent
extends AbstractComponent ...
@Module public class ApplicationModule
@Module public class StripeModule
一个ApplicationModule提供的是一个导航仪,我比它的方式相当肯定的对象是相当正确的:
@Provides @Singleton Navigator provideNavigator() {
return new Navigator();
}
这是一个非常简单的类几乎没有在它尚未:
@Singleton public class Navigator
然后,当我生成的代码,从StripeModule产生额外提供工厂 - StripeModule_ProvideNavigatorFactory。然后编译器会声明我没有提供它 - 这是真的,而且是有意的。它应该仅由应用程序组件提供。问题是,为什么这个工厂正在生成呢?为什么Dagger2不明白StripeModule不应该提供导航器?
您是否试图从'@ Singleton'作用域组件继承'Navigator'到您的'@ PerActivity'作用域?如果你通过'@Inject Navigator navigator'''注入'StripeActivity',通过'StripeComponent'',那么你需要提供导航器。这就是为什么我问这是否是你想要做的。 – EpicPandaForce
其实,只需要包含'StripeModule','ApplicationModule'和你试图用这些组件之一注入的类(特别是如果它包含'@Inject Navigator navigator;') – EpicPandaForce
啊,我只是然后,基于我认为你想要的结果写了一个答案。 – EpicPandaForce