在Dagger中使用@Inject在一个模块中使用值到另一个模块

时间:2018-07-26 02:56:24

标签: java dagger-2

我对Dagger还是比较陌生,我正在尝试了解模块之间@Inject批注的用法。以下是我的代码:

@Module
public class MyModule {

    @Provides
    @Named("myValue")
    @Singleton
    public String getRegion() {
        return System.getenv("myValue");
    }

}

@Module (includes = MyModule.class)
public class DependentModule {

    @Inject @Named("myValue") String myValue;

    @Provides
    @Singleton
    public MyClass myclass() {
        return myClass.builder()
            .stringValue(myValue)
            .build();
    }
}


@Component
public interface ApplicationComponent {
    MyClass provideMyClass();
}

使用Dagger模块的代码:

ApplicationComponent APPLICATION_COMPONENT = DaggerApplicationComponent.create();

MyClass classInstance = APPLICATION_COMPONENT.provideMyClass();

现在,每次我尝试运行代码时,程序都会失败,因为String的Injected值似乎始终为null。我已验证返回的环境变量不是null(我在主函数中进行了手动system.getenv()调用,并且返回了非null值)

我不明白是否应该以这种方式使用Inject注释?我不应该使用@Inject批注并将其用作方法参数吗?

0 个答案:

没有答案