2015-01-15 21 views
0

我正在使用Dagger並且迄今爲止它的優點。我有一個模塊的所有視圖(活動和片段),我通過對象圖注入它們。現在我想包括自定義視圖和我的模塊看起來像這樣Android Dagger如何在視圖組件中執行DI

@Module(
injects = { 
    //Activity 
    MainActivity.class, 


    //Fragments 
    LookupSearchResultsFragment.class, 


    // Views 

    MainSearchComponent.class 
}, 
//includes = { 
// PersistenceModule.class 
//}, 
library = true, 
complete = false, 
addsTo = AndroidModule.class) 

在我的MainSearchComponent如何注入對象圖?我目前這樣做:

ObjectGraph.create((BaseActivity)getContext()).inject(this); 

但我得到這個錯誤。 Caused by: java.lang.IllegalStateException: Module adapter for class ...MainActivity could not be loaded. Please ensure that code generation was run for this module.

回答

1

首先,你應該通過@Module -annotated類ObjectGraph.create(),不Activity類。其次,你不應該創造每一次你需要inject()東西的圖形。 通常的做法是將objectGraph作爲Application類的字段。這是你能得到什麼:

// Application class 
objectGraph = ObjectGraph.create(new AndroidModule()); 

然後在你的ActivityonCreate()

@Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    MyApp app = (MyApp) getApplication(); 
    activityGraph = app.getObjectGraph().plus(new ActivityModule()); 
    activityGraph.inject(this); // inject with respect of activity-specific components 
} 

而且不要忘記清除強大的裁判本地圖表儘快GC它:

@Override public void onDestroy() { 
    activityGraph = null; 
    super.onDestroy(); 
} 
+0

如果我想用運行時變量注入一個類,該怎麼辦?它不會幫助我在Application類中注入所有東西,那麼它會怎樣? – SoH

+0

@SoH你是什麼意思的運行時變量?你能給個例子嗎? – colriot

+0

我有類A,它根據從調用類C接收到的變量來注入另一個類B.它是可行的嗎? – SoH

0

好吧,所以我找到了解決方案。我需要在我指定組件的地方注入模塊。所以對我來說,我不得不寫下面的代碼

ObjectGraph.create((BaseActivity)getContext()).inject(this); 

這讓它工作。

ObjectGraph.create(new AcitivityModule()).inject(this); 
相關問題