[英]Dagger 2, How to add interface in dependency
我刚开始使用dagger 2.我已经为应用程序级依赖创建了依赖图。 现在我想创建特定活动所需的依赖关系所以我为活动创建了另一个Component
,然后我为该组件创建了Module和scope。 现在,当我完成编写所有代码我构建项目,但我得到编译器错误,我无法解决。
这就是我在做的事情。
@FeedsCatalogActivityScope
@Component(modules = FeedsCatalogActivityModule.class, dependencies = FeederApplicationComponent.class)
//My activity requires Catalog adapter so i am creating dependency for that
public interface FeedsCatalogActivityComponent {
CatalogAdapter getCatalogAdapter();
}
这是模块
@Module
public class FeedsCatalogActivityModule {
private final SelectedInterfaceListener selectedInterfaceListener;
public FeedsCatalogActivityModule(SelectedInterfaceListener selectedInterfaceListener) {
this.selectedInterfaceListener = selectedInterfaceListener;
}
@Provides
@FeedsCatalogActivityScope
public CatalogAdapter catalogAdapter(Picasso picasso, SelectedInterfaceListener mSelectesInterfaceListener) {
return new CatalogAdapter(picasso, mSelectesInterfaceListener);
}
}
这是范围
@Scope
public @interface FeedsCatalogActivityScope {
}
所以现在当我构建我得到这个错误
/Users/Zeeshan/Desktop/personal/Feeder/app/src/main/java/io/droidninja/feeder/FeederApplication.java错误:(10,31)错误:找不到符号类DaggerFeederApplicationComponent / Users / Zeeshan / Desktop / personal /Feeder/app/src/main/java/io/droidninja/feeder/ui/activities/FeedsCatalogActivityComponent.java错误:(13,20)错误:如果没有@,则无法提供io.droidninja.feeder.ui.adapters.SelectedInterfaceListener提供带注释的方法。 io.droidninja.feeder.ui.adapters.SelectedInterfaceListener注入io.droidninja.feeder.ui.activities.FeedsCatalogActivityModule.catalogAdapter(...,mSelectesInterfaceListener)io.droidninja.feeder.ui.adapters.CatalogAdapter在io.droidninja中提供。 feeder.ui.activities.FeedsCatalogActivityComponent.getCatalogAdapter()错误:任务':app:compileDebugJavaWithJavac'的执行失败。 编译失败; 请参阅编译器错误输出以获取详细信
我的理解是我在FeedsCatalogActivityModule
中FeedsCatalogActivityModule
问题。 我应该如何提供SelectedInterfaceListener
? 这是一个界面。
PS我是dagger2的新手,我刚刚开始使用它。
根据您的代码,当您在使用它的活动内部构建FeedsCatalogActivityComponent
时,您应该将SelectedInterfaceListener
的实例传递给FeedsCatalogActivityModule
。
在您的活动中创建一个方法来设置这样的组件
private void initializeInjector() {
FeedsCatalogActivityComponent feedsCatalogActivityComponent = DaggerFeedsCatalogActivityComponent.builder()
.feederApplicationComponent(feederApplicationComponent()/* create this method and it should return a correctly built FeederApplicationComponent */ )
.feedsCatalogActivityModule(
new FeedsCatalogActivityModule(
new SelectedInterfaceListener()
/* pass in the instance of SelectedInterfaceListener here */ )
).build();
}
然后记得改变Module提供的方法
@Provides
@FeedsCatalogActivityScope
public CatalogAdapter catalogAdapter(Picasso picassor) {
return new CatalogAdapter(picasso, this.selectedInterfaceListener);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.