0

のドキュメントに従ってOptionalBinder

オプションの値を、オプションでデフォルト値とバインドするための API。OptionalBinder は次の 2 つの役割を果たします。

  1. これにより、フレームワークは、ユーザーによってバインドされる場合とされない場合があるインジェクション ポイントを定義できます。
  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ますか?

4

2 に答える 2