Используйте модули Dagger без директивы «injects»
Я пытаюсь заставить Dagger работать без директивы «injects» внутри аннотации @Module. Я основываю свой тестовый проект наПример Android Dagger
Это та часть, которая доставляет мне проблемы:
@Module(
injects = HomeActivity.class,
complete = false
)
public class DemoModule {
// TODO put your application-specific providers here!
}
(Изменить): Что в моем кодеCTXModules.java
Часть, которую я хотел бы удалить, это «injects = HomeActivity.class». Я знаю, что могу пометить свои собственные модули с помощью аннотации @Inject в конструкторе, чтобы удалить эту часть, но почему-то это не работает с модулем, добавленным в график. С этой линией все работает просто отлично.
Причина, по которой мне это нужно, заключается в том, что кинжал будет реализован в проекте базовой библиотеки, который станет основой для некоторых проектов, которые используют общую кодовую базу и, следовательно, в настоящий момент или пишут эту часть кода, я не знаю, что классы будут внедрять модули.
Возможно ли то, что я пытаюсь сделать?
Я предполагаю, что это возможно, потому чтоМодуль Android класса не использует эту директиву.
Надеюсь, это достаточно ясно. Заранее спасибо!
(РЕДАКТИРОВАТЬ)
Я должен был упомянуть это. В моем модуле я удаляю «injects = HomeActivity.class» и добавляю «library = true», как вМодуль Android класса, Что происходит, то, что я получаю эту ошибку (мой плохой, я не добавил ее раньше):
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
Кроме того, я загрузилмой тестовый проект на github
(Окончательное редактирование) в соответствии с ответом Джейка: «Объявление модуля в качестве библиотеки не уменьшает потребности Кинжала в точках инъекции». И поэтому ответ на мой оригинальный вопрос заключается в том, что это невозможно.