【问题标题】:Profiles In dagger匕首中的配置文件
【发布时间】:2020-10-05 06:53:14
【问题描述】:

我是 dagger 的新手,我正在寻找如何在 dagger-2.x 中实现类似弹簧配置文件的功能。我想要为我的 devo 和 prod 环境使用不同的 bean,但我正在使用带有 Java 的 dagger 框架。

@Provides
@Singleton
public void providesDaggerCoffeeShopClient(Stage stage) {
  DaggerCoffeeShop.builder()
    .dripCoffeeModule(new DripCoffeeModule())
    .qualifier(stage)
    .build();
}

在这里,如果阶段是“Devo”,我想跳过这个 bean 创建。任何帮助将不胜感激。

【问题讨论】:

  • 对相同感到好奇....

标签: dagger-2 spring-profiles


【解决方案1】:

嗯。两天前我遇到了这个问题。并且由于对此事进行了研究。我正在寻找一种解决方案,使我能够运行具有不同配置文件的应用程序,这些配置文件作为应用程序运行时的系统属性传递,例如:

java -Denv=local-dev-env -jar java-app.jar

我能找到的唯一合适的解决方案是遵循官方文档测试指南: https://dagger.dev/dev-guide/testing 并将我的一个模块分成不同的模块,特别是当我想在本地运行我的应用程序避免连接到真实数据库并对真实数据库执行任何命令时,我必须分离和替换数据库依赖项。 当我运行我的应用程序时,我会检查系统属性,例如:

public boolean isLocalDevEnv() {
        return Environments.LOCAL_DEV.envName.equals(System.getProperty("env", Environments.PRODUCTION.envName));
    }

如果系统属性不包含我要查找的属性,那么我 创建我的组件的 PRODUCTION 实例(配置为使用生产模块):

DaggerMyAppComponent.create()

大概是这样的:

@Component(modules = {MyAppModule.class, DaoModule.class})
@Singleton
public interface MyAppComponent {...}

否则,我创建组件的 loca-dev-env 版本,该版本使用生成 Dao 模拟的模块版本,否则将创建与真实数据库的真实连接:

DaggerMyAppLocalDevEnvComponent.create()

大概是这样的:

@Component(modules = {MyAppModule.class, DaoMockModule.class})
@Singleton
public interface MyAppLocalDevEnvComponent {...}

希望它很清楚,所以只需从系统属性和程序决策的角度考虑 Dagger 2 的 Spring Profiles。与 Spring 的 Profiles 实现相比,这种方法肯定需要大量样板代码,但这是我能够想出的唯一可行的方法。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2020-10-02
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多