使用匕首2.11,以下代码返回 “错误:[dagger.android.AndroidInjector.inject(T)]找到一个依赖循环:”。这是因为provideApp方法具有参数“App应用程序”。如果我删除它并执行直接提供应用程序实例的肮脏的黑客攻击,代码将编译并运行。匕首2.11依赖循环
从我以前见过的例子,它使用的是常见的做法,以保持模块中的应用程序的实例,并使用其他供应商,但由于该模块类是现在的抽象,这是行不通的@Provide方法需要是静态的。
我该如何解决这个问题?
@Module(includes = AndroidInjectionModule.class)
public abstract class AppModule {
@Provides
@Singleton
static App provideApp(App app) {
return app;
}
@Provides
static Authenticator provideAuthenticator(App app) {
return new AuthenticatorImpl(app);
}
}
编辑:
我需要实现基本上是这样的行为:
@Module(includes = AndroidInjectionModule.class)
public class AppModule {
private App application;
AppModule(App app) {
application = app;
}
@Provides
Authenticator provideAuthenticator() {
return new AuthenticatorImpl(application);
}
}
然而,这并不工作,因为现在的AppModule是一个抽象类,应用程序如果我使用不带静态关键字的@Provides Authenticator provideAuthenticator(),则不会编译。如果我使用static关键字,那么我无法访问非静态应用程序字段。
'应用provideApp(应用程序)' - > ...所以你需要一个'App'提供一个'App'?这是一个错字,或者你没有想到通过 –
编辑我原来的帖子@DavidMedenjak –