我想讓匕首在@Module註釋中沒有「注入」指令的情況下工作。我立足我的測試項目上Android Simple Dagger example使用沒有「注入」指令的匕首模塊
這是給我的問題的一部分:
@Module(
injects = HomeActivity.class,
complete = false
)
public class DemoModule {
// TODO put your application-specific providers here!
}
(編輯):這在我的代碼是CTXModules.java
的一部分,我會喜歡刪除是「injects = HomeActivity.class」。我知道我可以用構造函數中的@Inject註釋標記我自己的模塊,以刪除那裏的那部分,但不知何故它不能與添加到圖形中的模塊一起工作。有了那條線,一切正常。
我需要這個的原因是因爲匕首將在一個基礎庫項目中實現,該基礎項目將成爲一些共享通用代碼庫的項目的基礎,因此目前還是編寫代碼的這一部分不知道哪些類將注入模塊。
我試圖做甚至可能嗎?
我認爲這是可能的,因爲Android Module class不使用該指令。
希望它很清楚。提前致謝!
(編輯)
我應該提到它。在我的模塊中,我刪除「injects = HomeActivity.class」並添加「庫= true」,如Android Module class。會發生什麼事則是,我得到這個錯誤(我的壞我之前沒有添加的話):根據傑克的答案
12-10 09:21:16.807: E/AndroidRuntime(21783): FATAL EXCEPTION: main
12-10 09:21:16.807: E/AndroidRuntime(21783): Process: com.ef.daggertestproject, PID: 21783
12-10 09:21:16.807: E/AndroidRuntime(21783): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ef.daggertestproject/com.ef.daggertestproject.MainActivity}: java.lang.IllegalArgumentException: No inject registered for members/com.ef.daggertestproject.MainActivity. You must explicitly add it to the 'injects' option in one of your modules.
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.access$700(ActivityThread.java:135)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.os.Handler.dispatchMessage(Handler.java:102)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.os.Looper.loop(Looper.java:137)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.main(ActivityThread.java:4998)
12-10 09:21:16.807: E/AndroidRuntime(21783): at java.lang.reflect.Method.invokeNative(Native Method)
12-10 09:21:16.807: E/AndroidRuntime(21783): at java.lang.reflect.Method.invoke(Method.java:515)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-10 09:21:16.807: E/AndroidRuntime(21783): at dalvik.system.NativeStart.main(Native Method)
12-10 09:21:16.807: E/AndroidRuntime(21783): Caused by: java.lang.IllegalArgumentException: No inject registered for members/com.ef.daggertestproject.MainActivity. You must explicitly add it to the 'injects' option in one of your modules.
12-10 09:21:16.807: E/AndroidRuntime(21783): at dagger.ObjectGraph$DaggerObjectGraph.getInjectableTypeBinding(ObjectGraph.java:281)
12-10 09:21:16.807: E/AndroidRuntime(21783): at dagger.ObjectGraph$DaggerObjectGraph.inject(ObjectGraph.java:258)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.ef.daggertestproject.MyApplication.inject(MyApplication.java:47)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.ef.daggertestproject.BaseActivity.onCreate(BaseActivity.java:27)
12-10 09:21:16.807: E/AndroidRuntime(21783): at com.ef.daggertestproject.MainActivity.onCreate(MainActivity.java:16)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.Activity.performCreate(Activity.java:5243)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-10 09:21:16.807: E/AndroidRuntime(21783): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
12-10 09:21:16.807: E/AndroidRuntime(21783): ... 11 more
而且,我已經上傳my test project to github
(決賽編輯):「聲明一個模塊因爲圖書館不能減輕Dagger對注射點的瞭解。「因此,我原來的問題的答案是,這是不可能的。
謝謝傑克,我已經嘗試過,仍然無法正常工作。我的壞我沒有指定它。我用更多的相關信息編輯了我的問題,並且我已經將我的測試項目添加到github中,並且鏈接到了我提到的類。 – spCoder
我已經更新了我的答案,以顯示庫模塊的下游使用情況。你仍然需要告訴Dagger關於「注入」的地方,以便能夠注入。 –
正如你在編輯開始時指定的那樣:「將模塊聲明爲庫並不能減輕Dagger瞭解注入點的需求。」 因此,我原來的問題的答案是,這是不可能的。 謝謝傑克! – spCoder