[英]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.