我对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批注并将其用作方法参数吗?