我正在嘗試新的匕首2,這是我第一次實施它,但我無法使它工作。我想我得到的概念,我理解的例子here匕首2活動注射不工作
我嘗試複製相同的結構,只是修改了我的例子。
這裏是擴展圖形的AppComponent,我定義了我想要的類。
@ApplicationScope
@Component(modules = {AppModule.class, DataModule.class})
public interface EFAppComponent extends EFGraph {
/**
* An initializer that creates the graph from an application.
*/
public final static class Initializer {
private Initializer() {
} // No instances.
public static EFAppComponent init(EFApp app) {
return Dagger_EFAppComponent.builder()
.appModule(new AppModule(app))
.build();
}
}
}
public interface EFGraph {
public void inject(EFApp app);
public ImageLoader imageLoader();
public EventBus eventBus();
}
然後在每個模塊中,我提供了相應的類。從這裏一切正常,Dagger接縫正確構建Dagger_EFAppComponent。
然後在應用程序的I類init已使用構造
component = EFAppComponent.Initializer.init(this);
component.inject(this);
然後我的目標是注入ImageLoader的和EventBus在我的活動。爲此,我創建一個ActivityComponent。
@ActivityScope
@Component(
dependencies = EFAppComponent.class,
modules = ActivityModule.class
)
public interface ActivityComponent {
public void inject(BaseActivity activity);
}
然後從我的活動我呼籲注射。
activityComponent = Dagger_ActivityComponent.builder()
.eFAppComponent(component)
.activityModule(new ActivityModule(this))
.build();
activityComponent.inject(this);
所以,因爲我在應用程序注入注入方法調用之後在我的活動中聲明瞭@Inject EventBus eventBus。那不是。
因此,在逐步調試和跟蹤我的應用程序和示例後,我意識到Dagger_ActivityComponent未正確構建。
private final ActivityModule activityModule;
private final EFAppComponent eFAppComponent;
private Dagger_ActivityComponent(Builder builder) {
assert builder != null;
this.activityModule = builder.activityModule;
this.eFAppComponent = builder.eFAppComponent;
initialize();
}
如果initialize方法是空的,並且沒有Provider被聲明爲變量。
我錯過了什麼嗎?我一整天都在試圖讓它工作,但我不是成功的。
欣賞幫助。
您應該創建另一個問題,我認爲或修改現有的 – 2015-03-31 13:04:48
我會創建一個新的,所以如果人們面臨同樣的問題,這裏是一個解決方案hehe – Marcel 2015-03-31 13:24:32
在同一個組件'public void inject(SecondActivity activity)'' 。這是由於匕首提供的靜態輸入。 – 2015-03-31 13:33:48