[英]Dagger 2, How to add interface in dependency
I just started working with dagger 2. I have created dependency graph for application level dependency. 我刚开始使用dagger 2.我已经为应用程序级依赖创建了依赖图。 Now that i wanted to create dependency that are required for a specific activity So i created another
Component
for activity then i created the Module and scope for that component. 现在我想创建特定活动所需的依赖关系所以我为活动创建了另一个
Component
,然后我为该组件创建了Module和scope。 Now that when i am done writing all the code i build the project but i get compiler error which i am unable to solve. 现在,当我完成编写所有代码我构建项目,但我得到编译器错误,我无法解决。
Here is what i am doing. 这就是我在做的事情。
@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();
}
Here is the Module 这是模块
@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);
}
}
Here is the scope 这是范围
@Scope
public @interface FeedsCatalogActivityScope {
}
So now when i build i get this error 所以现在当我构建我得到这个错误
/Users/Zeeshan/Desktop/personal/Feeder/app/src/main/java/io/droidninja/feeder/FeederApplication.java Error:(10, 31) error: cannot find symbol class DaggerFeederApplicationComponent /Users/Zeeshan/Desktop/personal/Feeder/app/src/main/java/io/droidninja/feeder/ui/activities/FeedsCatalogActivityComponent.java Error:(13, 20) error: io.droidninja.feeder.ui.adapters.SelectedInterfaceListener cannot be provided without an @Provides-annotated method.
/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 is injected at io.droidninja.feeder.ui.activities.FeedsCatalogActivityModule.catalogAdapter(…, mSelectesInterfaceListener) io.droidninja.feeder.ui.adapters.CatalogAdapter is provided at io.droidninja.feeder.ui.activities.FeedsCatalogActivityComponent.getCatalogAdapter() Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
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'的执行失败。 Compilation failed;
编译失败; see the compiler error output for details.
请参阅编译器错误输出以获取详细信
What i am understanding is that i have problem in FeedsCatalogActivityModule
. 我的理解是我在
FeedsCatalogActivityModule
中FeedsCatalogActivityModule
问题。 How should i provide SelectedInterfaceListener
? 我应该如何提供
SelectedInterfaceListener
? It is a interface. 这是一个界面。
PS i am new to dagger2 i just get started with it. PS我是dagger2的新手,我刚刚开始使用它。
According to your code, you are suppose to pass an instance of SelectedInterfaceListener
to FeedsCatalogActivityModule
when your are building FeedsCatalogActivityComponent
inside the activity that uses it. 根据您的代码,当您在使用它的活动内部构建
FeedsCatalogActivityComponent
时,您应该将SelectedInterfaceListener
的实例传递给FeedsCatalogActivityModule
。
in your activity create a method that setup the component like this 在您的活动中创建一个方法来设置这样的组件
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();
}
And then remember to change the Module provides method to 然后记得改变Module提供的方法
@Provides
@FeedsCatalogActivityScope
public CatalogAdapter catalogAdapter(Picasso picassor) {
return new CatalogAdapter(picasso, this.selectedInterfaceListener);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.