我刚刚了解了依赖注入(DI),我开始喜欢它了。要注入依赖项,我使用的是Google Guice框架。一切都在概念上运行良好,但在编写模块时,我想到了一个想法,如果我的模块需要依赖项作为构造函数,毕竟,它只是一个扩展AbstractModule的类。 所以,基本上,我有3个模块作为一个整体。
环境模块
public class EnvModule extends AbstractModule {
@Override
protected void configure() {
install(new Servicemodule());
}
}
ServiceModule
public class ServiceModule extends AbstractModule {
private final boolean isEnabled;
@Override
protected void configure() {
if (isEnabled) {
install (new ThirdModule());
}
}
基本上,服务模块中的变量定义我的应用程序是否需要安装第三个模块。该变量在应用程序配置文件中定义。那么如何在ServiceModule中注入该变量?由于该领域是最终的,因此无法进行二次注入,是否有办法使用施工注入或现场注入来注入该值。
答案 0 :(得分:2)
我看到以下选项:
使用系统变量:
ServiceModule() {isEnabled = System.getProperty("isThirdModuleEnabled")};
使用@Provides:
class ServiceModule ... {
@Provide @Singleton ThirdModuleParam getThirdModuleParam(...) {
//read the config file
ThirdModuleParam res = new ThirdModuleParam();
res.setIsEnabed(...);
return res;
}
}
class ThirdModule {
@Provide SomeThirdModuleClass getIt(ThirdModuleParam param) {
return param.isEnabled() ? new SomeThirdModuleClass() : null;
}