gpt4 book ai didi

java - Guice:强制绑定(bind)作为提供者注入(inject)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:12 24 4
gpt4 key购买 nike

我正在寻找一种方法来强制将某些 Guice 绑定(bind)仅作为提供者注入(inject)。例如,当有这样的配置时

interface ResultLogger {
void log(String resultAsString);
}

class ResultLoggerProvider implements Provider<ResultLogger> {
// ...
}

class ResultDisplayModule extends AbstractModule {
@Override
protected void configure() {
bind(ResultLogger.class).toProvider(ResultLoggerProvider.class);
}
}

我想有办法配置我的模块,以便像这样的类

@Singleton
class ResultParser {
private final Provider<ResultLogger> loggerProvider;

@Inject
public ResultParser(Provider<ResultLogger> loggerProvider) {
this.loggerProvider = loggerProvider;
}
}

可以很好地注入(inject),但是像这样的实现

@Singleton
class ResultParser {
private final ResultLogger resultLogger;

@Inject
public ResultParser(ResultLogger resultLogger) {
this.resultLogger = resultLogger;
}
}

应该抛出一个 RuntimeException,通知开发人员 ResultLogger 只能通过提供程序使用。理想情况下会尽快抛出异常,例如在注入(inject)器的构造过程中。我正在寻找一种使用 Guice 3.0 中现有 API 实现此目的的简单方法。

最佳答案

也许你根本不应该实现 Provider 而只是有一个

@Singleton
public class ResultLoggerProvider {
public ResultLogger get() {...}
// ...
}

@Singleton
class ResultParser {
private final ResultLoggerProvider loggerProvider;

@Inject
public ResultParser(ResultLoggerProvider loggerProvider) {
this.loggerProvider = loggerProvider;
}
}

并删除其他绑定(bind)。

关于java - Guice:强制绑定(bind)作为提供者注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6897166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com