我刚刚开始使用 Dagger 和依赖注入(inject),并且想知道一些较低级别依赖项在运行时的配置。有没有办法在运行时为低级注入(inject)的单例提供配置对象?
我所追求的基本想法:
@Singleton
class DatabaseService {
@Inject
public DatabaseService(DatabaseConnectionConfig config) { // how can this arg be passed in at runtime?
// make the connection
}
}
@Singleton
class HighLevelService {
@Inject
public HighLevelService(DatabaseService db) {
}
}
@Module
class Module {
@Binds
abstract HighLevelService bindHighLevelService(HighLevelService svc);
@Binds
abstract DatabaseService bindDatabaseService(DatabaseService svc);
}
@Singleton
@Component(modules = {
Module.class
})
interface Factory {
HighLevelService highLevelService();
static Factory create() {
return DaggerFactory.create();
}
}
public class App {
public static void main(String[] args) {
// get the config details from the arguments
DatabaseConnectionConfig config = parseDBConfigFromArgs(args);
// is there a way to configure the DatabaseConnectionConfig from here?
HighLevelService svc = Factory.create().highLevelService();
}
}
最佳答案
您可以使用 @Component.Factory
(或 @Component.Builder
)与 @BindsInstance
。
@Singleton
@Component
interface Factory {
HighLevelService highLevelService();
// This nested interface is typically called "Factory", but I
// don't want to look up how to access Factory from Factory.Factory
@Component.Factory
interface MyFactory {
Factory create(@BindsInstance DatabaseConnectionConfig config);
}
static Factory create(DatabaseConnectionConfig config) {
return DaggerFactory.factory().create(config);
}
}
public class App {
public static void main(String[] args) {
DatabaseConnectionConfig config = parseDBConfigFromArgs(args);
HighLevelService svc = Factory.create(config).highLevelService();
}
}
关于java - 使用配置播种 Dagger 2 Factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62181347/