@Override protected void configure() { bind(TimeSource.class).to(DefaultTimeSource.class).in(Singleton.class); if (enableFederation) { bind(SignatureHandler.class) .toProvider(SigningSignatureHandler.SigningSignatureHandlerProvider.class); } else { bind(SignatureHandler.class) .toProvider(NonSigningSignatureHandler.NonSigningSignatureHandlerProvider.class); } try { bind(WaveSignatureVerifier.class).toConstructor(WaveSignatureVerifier.class.getConstructor( WaveCertPathValidator.class, CertPathStore.class)); bind(VerifiedCertChainCache.class).to(DefaultCacheImpl.class).in(Singleton.class); bind(DefaultCacheImpl.class).toConstructor( DefaultCacheImpl.class.getConstructor(TimeSource.class)); } catch (NoSuchMethodException e) { throw new IllegalStateException(e); } bind(WaveletNotificationDispatcher.class).in(Singleton.class); bind(WaveBus.class).to(WaveletNotificationDispatcher.class); bind(WaveletNotificationSubscriber.class).to(WaveletNotificationDispatcher.class); bind(TrustRootsProvider.class).to(DefaultTrustRootsProvider.class).in(Singleton.class); bind(CertificateManager.class).to(CertificateManagerImpl.class).in(Singleton.class); bind(DeltaAndSnapshotStore.class).to(DeltaStoreBasedSnapshotStore.class).in(Singleton.class); bind(WaveMap.class).in(Singleton.class); bind(WaveletProvider.class).to(WaveServerImpl.class).asEagerSingleton(); bind(ReadableWaveletDataProvider.class).to(WaveServerImpl.class).in(Singleton.class); bind(HashedVersionFactory.class).toInstance(HASH_FACTORY); }