@Documented
@Retention(value=RUNTIME)
@Target(value=CONSTRUCTOR)
public @interface AssistedInject
Note that an assisted injection type cannot be scoped. In addition, assisted injection
requires the use of a factory annotated with AssistedFactory
(see the example below).
Example usage:
Suppose we have a type, DataService
, that has two dependencies: DataFetcher
and Config
. When creating DataService
, we would like to pass in an instance of
Config
manually rather than having Dagger create it for us. This can be done using
assisted injection.
To start, we annotate the DataService
constructor with AssistedInject
and we
annotate the Config
parameter with Assisted
, as shown below:
final class DataService {
private final DataFetcher dataFetcher;
private final Config config;
@AssistedInject
DataService(DataFetcher dataFetcher, @Assisted Config config) {
this.dataFetcher = dataFetcher;
this.config = config;
}
}
Next, we define a factory for the assisted type, DataService
, and annotate it with
AssistedFactory
. The factory must contain a single abstract, non-default method which
takes in all of the assisted parameters (in order) and returns the assisted type.
@AssistedFactory
interface DataServiceFactory {
DataService create(Config config);
}
Dagger will generate an implementation of the factory and bind it to the factory type. The factory can then be used to create an instance of the assisted type:
class MyApplication {
@Inject DataServiceFactory dataServiceFactory;
dataService = dataServiceFactory.create(new Config(...));
}