0
我檢查了所有問題,但沒有發現任何線索。我剝奪了我的問題,以一個簡單的代碼:匕首2不注入依賴模塊
情況: 我想有:
CatComponent catComponent = DaggerCatComponent.builder()
.kameModule(new KameModule(MainActivity.this))
.build();
catComponent.getCatAnalyzer().analyze();
我已經創建的組件:
@Component(modules = {KameModule.class, CatAnalyzerModule.class})
public interface CatComponent {
CatAnalyzer getCatAnalyzer();
}
和模塊:
@Module
public class KameModule {
private Context context;
public KameModule(Context context) {
this.context = context;
}
@Provides
KameCat provideKameCat() {
return new KameCat(context);
}
}
@Module(includes = KameModule.class)
public class CatAnalyzerModule {
@Inject
KameCat cat;
@Provides
CatAnalyzer provideCatAnalyzer() {
return new CatAnalyzer(cat);
}
}
和類:
public class KameCat {
Context context;
public KameCat(Context context) {
this.context = context;
}
public void doCatStuff() {
Toast.makeText(context, "Poo and Meow", Toast.LENGTH_LONG).show();
}
}
public class CatAnalyzer {
@Inject
KameCat cat;
@Inject
public CatAnalyzer(KameCat cat) {
this.cat = cat;
}
void analyze() {
cat.doCatStuff();
}
}
當我從CatComponent找回我的CatAnalyzer對象有cat
場清零。 我不知道爲什麼Dagger不會注入它。你能指導我嗎?
你'@ Inject'註解的是多餘的。你可以從模板中刪除模塊,或者在構造函數中使用@Inject註解。無論哪種方式,「KameCat貓」上的「@ Inject」註釋都是多餘的。 – rdshapiro
此外,對於更多習慣性的DependencyInjection,「KameModule」將提供上下文,以便它可以參與任何模塊中的任何地方。然後,'provideKameCat'方法也可以使用'Context'作爲參數,類似於你使用'provideCatAnalyzer(KameCat cat)'做的事情' – rdshapiro
'最後,如果你結束,'@ Module.includes'不是必須的包括兩個模塊在'@ Component.modules'列表中。 – rdshapiro