通过注入参数实例化Guice模块

问题描述

我具有下面的Guice模块层次结构。

服务启动器

public class ABCServiceLauncher
{
    public static void main(final String[] args) throws Exception
    {
        new ABCServiceLauncher().execute();
    }

    private void execute() throws Exception
    {
        // Initialize the injector
        final Injector injector = Guice.createInjector(
            Stage.DEVELOPMENT,new EnvironmentModule()
        );
}
public class EnvironmentModule extends AbstractModule {
...
@Override
    public void configure() {
    bind(ConfigHelper.class).toProvider(ConfigHelperProvider.class).in(Singleton.class);
    bind(ConfigFactory.class).to(ConfigHelper.class);
    install(new ServiceModule());
     ...
    }
}

服务模块

public class ServiceModule extends AbstractModule {

@Override
    public void configure() {
    // bindings
    ...
    // installation of dependency modules
    }

}

对于Config,ABC服务已将ConfigHelperProvider 定义为

public class ConfigHelperProvider implements Provider<ConfigHelper>
{
    @Override
    public ConfigHelper get()
    {

        ConfigHelper configHelper = new ConfigHelper();
        configHelper.addTypes(mConfigTypes);
        ConfigRecorder.setConfigFactory(configHelper);
        return configHelper;
    }

    @Inject
    public ConfigHelperProvider
    (
        final List<ConfigType> configTypes
    )
    {
        mConfigTypes = configTypes;
    }

    private final List<ConfigType> mConfigTypes;

}

我正在尝试定义一个成员类型为ConfigFactory

的新模块
@AllArgsConstructor
public class SubPackageModule extends AbstractModule
{
    @Override
    protected void configure()
    {
       
        final ConfigManager configManager = new DefaultConfigManager(configFactory);

        install(new ABCSubPackageModule(configManager));
    }

    private ConfigFactory configFactory;
}

ConfigHelper是ConfigFactory的一种。我想在服务模块中安装ABCSubPackageModule。

我尝试过

@AllArgsConstructor
public class ABCSubPackageModule extends AbstractModule
{
    @Override
    protected void configure()
    {
       final Provider<ConfigHelper> configHelperProvider = getProvider(ConfigHelper.Class);
       configFactory = configHelperProvider.get()
        ...
    }

    private ConfigFactory configFactory;
}

此操作失败,错误为This Provider cannot be used until the Injector has been created。由于进样器尚未准备就绪,因此可能会出现错误。

如何将configFactory注入ABCSubPackageModule中?有没有办法利用ConfigHelperProvider将configFactory注入ABCSubPackageModule?

谢谢, 帕万(Pavan)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)