Я ищу способ заставить определенные привязки Guice вводиться только как провайдеры. Например, когда есть конфигурация типа
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;
}
}
может быть вставлен просто отлично, но реализация, как
@Singleton
class ResultParser {
private final ResultLogger resultLogger;
@Inject
public ResultParser(ResultLogger resultLogger) {
this.resultLogger = resultLogger;
}
}
должен вызвать исключение RuntimeException, уведомляющее разработчика о том, что ResultLogger
доступно только через провайдера. В идеале исключение должно быть выдано как можно скорее, например, во время строительства инжектора. Я ищу простой способ добиться этого, используя существующий API в Guice 3.0.