Reprository : https://github.com/googlesamples/android-architecture
Branch - todo-mvp-dagger
It is found that TaskFragment is injected using contructorinjection
For instance : In the TasksModule, I want to add another module for task fragment like below for field Injection in the TaskFragment
@Module
class TasksModule{
@Fragmentscoped
@contributesandroidinjector(modules = AnotherModule.class)
abstract TasksFragment tasksFragment();
}
@Module
public class AnotherModule {
@Provides
@FragmentScoped
static Calendar getCalendar() {
return Calendar.getInstance();
}
}
@activityscoped
public class TasksFragment extends DaggerFragment implements TasksContract.View {
@Inject
Calendar calendar;//Field injection
@Inject
TasksFragment(){
}
}
Activity :
public class TasksActivity extends DaggerAppCompatActivity {
@Inject
Lazy<TasksFragment> taskFragmentProvider;
....
}
I am getting the error as :
Error:(34, 8) error: [dagger.android.AndroidInjector.inject(T)] java.util.Calendar cannot be provided without an @Provides- or @Produces-annotated method.
java.util.Calendar is injected at
com.example.android.architecture.blueprints.todoapp.tasks.TasksFragment.calendar
dagger.Lazy<com.example.android.architecture.blueprints.todoapp.tasks.TasksFragment> is injected at
com.example.android.architecture.blueprints.todoapp.tasks.TasksActivity.taskFragmentProvider
com.example.android.architecture.blueprints.todoapp.tasks.TasksActivity is injected at
dagger.android.AndroidInjector.inject(arg0)
A binding with matching key exists in component: com.example.android.architecture.blueprints.todoapp.tasks.TasksModule_TasksFragment.TasksFragmentSubcomponent
Am I missing anything here regarding injection?