Używaj modułów Dagger bez dyrektywy „injects”

Próbuję działać w Daggerze bez dyrektywy „injects” wewnątrz adnotacji @Module. Opieram swój projekt testowy naPrzykład prostego sztyletu na Androida

To jest część, która sprawia mi problemy:

@Module(
    injects = HomeActivity.class,
    complete = false
)
public class DemoModule {
  // TODO put your application-specific providers here!
}

(Edytuj): Który w moim kodzie jestCTXModules.java

Część, którą chciałbym usunąć, to „injects = HomeActivity.class”. Wiem, że mogę oznaczyć moje własne moduły adnotacją @Inject w konstruktorze, aby usunąć tam tę część, ale w jakiś sposób nie działa ona z modułem dodanym do wykresu. Z tą linią wszystko działa dobrze.

Powód, dla którego tego potrzebuję, jest taki, że sztylet zostanie zaimplementowany w projekcie biblioteki bazowej, który będzie podstawą dla niektórych projektów, które mają wspólną bazę kodu i dlatego w tej chwili lub pisząc tę ​​część kodu nie wiem co klasy wprowadzą moduły.

Czy to, co próbuję zrobić, jest możliwe?

Zakładam, że jest to możliwe, ponieważKlasa modułu Android nie używa tej dyrektywy.

Mam nadzieję, że jest wystarczająco jasne. Z góry dziękuję!

(EDYTOWAĆ)

Powinienem o tym wspomnieć. W moim module usuwam „injects = HomeActivity.class” i dodaję „library = true” jak wKlasa modułu Android. Co się wtedy dzieje, to otrzymuję ten błąd (mój zły, którego wcześniej nie dodałem):

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

Ponadto przesłałemmój projekt testowy na github

(Final Edit) zgodnie z odpowiedzią Jake'a: „Deklarowanie modułu jako biblioteki nie łagodzi potrzeb Sztyleta, aby wiedzieć o punktach wstrzykiwania”. Dlatego odpowiedź na moje pierwotne pytanie brzmi, że nie jest to możliwe.

questionAnswers(1)

yourAnswerToTheQuestion