java - 使用配置播种 Dagger 2 Factory

标签 java dependency-injection dagger-2

我刚刚开始使用 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/

相关文章:

java - 为什么在启动运行配置时 Eclipse 会以 "Verifying launch attributes..."状态挂起 57%?

android - 如何使用 dagger2 注入(inject)没有任何 Activity 或 fragment 的 java 类

android - 将 Dagger2 与 PreferenceFragmentCompat 结合使用

c# - 使用 Ninject 注入(inject)工厂字典

android - Dagger 2 - 为什么这是一个依赖循环?

java - Ivy 似乎只获取 javadoc jar

java - 在 Spring Rest Controller 中出现 JSON 解析错误 (MismatchedInputException)

java - 与 SpringJUnit4ClassRunner.class 一起使用时,Mockito/PowerMockito 冲突(可能)

javascript - JavaScript 中的依赖注入(inject)

android - 在 Android 上使用 SubCut (Scala DI)