我在玩弄試圖學習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