特定のGuiceバインディングをプロバイダとして強制的に注入する方法を探しています。例えば、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;
}
}
は、ResultLogger
がプロバイダ経由でのみ利用可能であることを開発者に通知するRuntimeExceptionをスローする必要があります。例外はできるだけ早くスローされるのが理想的です。インジェクタの構成中に生じる。 Guice 3.0の既存のAPIを使用してこれを実現する簡単な方法を探しています。
これは私の問題にとって最も合理的な解決策のようです。 Guice ProviderクラスとAPIを使用しようとすると、あまりにも "箱の中"と思っていたようです。ありがとう! – ddso