我刚刚开始使用Dagger &依赖项注入,并想知道一些低级依赖项在运行时的配置。是否有一种方法可以在运行时为配置对象提供低级别注入的Singleton?
我想要的基本概念是:
@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();
}
}发布于 2020-06-03 20:32:04
您可以将@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();
}
}https://stackoverflow.com/questions/62181347
复制相似问题