我试图理解并实施Dagger 2.我已经阅读了很多不同的教程和官方documentation。我想我一般都理解它,但我仍然无法理解一些简单的观点(我写的时候我已经找到了解决方案但是......):
@Provides方法可能具有自己的依赖关系。
什么时候可能?
我认为可以获得"组件包含一个依赖循环"。
有人可以帮助我在可能的情况下及在不可能的情况下理解案件 感谢。
答案 0 :(得分:3)
实际上,您可以使用限定符(@Named("something")
注释)来获取给定依赖项的多种不同类型的实现。
@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
void inject(BaseActivity baseActivity);
@Named("first")
BaseNavigator firstNavigator();
@Named("second")
BaseNavigator secondNavigator();
Context context();
//...
}
@Module
public class ApplicationModule {
private final AndroidApplication application;
public ApplicationModule(AndroidApplication application) {
this.application = application;
}
@Provides
@Singleton
@Named("first")
BaseNavigator provideFirstNavigator() {
return new SomeNavigator();
}
@Provides
@Singleton
@Named("second")
BaseNavigator provideSecondNavigator() {
return new OtherNavigator();
}
@Provides
Context provideApplicationContext() {
return this.application;
}
}
public abstract class BaseActivity extends Activity {
@Inject
@Named("second")
BaseNavigator navigator;