Asking to inject based on a Module without a Component is a bit like asking if you can have dinner if you have a recipe but no kitchen. The Module is just the recipe (configuration); the Component does all the cooking (creation). In this analogy, the implementations themselves would be the ingredients, which Dagger prepares on demand for you.
Most of Dagger's functionality comes from the implementation Dagger makes based on the interface you annotate with @Component
. The rest of Dagger's codegen processes your @Module
classes and your classes that use @Inject
so that Dagger can call methods and constructors and set fields, but without a @Component
nothing will call those helper classes. So in all cases a @Component
is really necessary.
That said, as long as you have a Component, you do have a choice whether to let Dagger create your class—retrieving the instance from Dagger—or to create your class manually and let Dagger populate its @Inject
members later.