のドキュメントに従ってOptionalBinder
オプションの値を、オプションでデフォルト値とバインドするための API。OptionalBinder は次の 2 つの役割を果たします。
- これにより、フレームワークは、ユーザーによってバインドされる場合とされない場合があるインジェクション ポイントを定義できます。
- フレームワークは、ユーザーが変更できるデフォルト値を提供できます。
上記の最初のポイントをフォローアップしようとしています。そのために、次のセットアップがあります。
interface Reporting<R> {} // service to be bind optionally
class InternalServiceImpl implements InternalService {
@Inject
Reporting reporting;
... // use this in a method
}
public class FrameworkModule extends AbstractModule {
protected void configure() {
OptionalBinder.newOptionalBinder(binder(), Reporting.class);
}
}
次のようなバインディングを提供しない場合、ユーザー モジュール( class UserWorkingModule
)で
bind(new TypeLiteral<Reporting<ReportingEvent>>(){}).to(ReportingImpl.class).in(Singleton.class);
アプリケーションは、次のログで起動に失敗します:
1) No implementation for Reporting was bound. while locating Reporting for field at InternalServiceImpl.reporting(InternalServiceImpl.java:21) at FrameworkModule.configure(FrameworkModule.java:55) (via modules: UserWorkingModule -> FrameworkModule)
でバインディングを提供する必要がReporting
ありUserWorkingModule
ますか?