2017-02-28 4 views
0

私はGuice for Dependency injectionを使用しています。私は@CheckedProvidesを使用したいのですが、オブジェクトの構築が例外をスローする可能性があり、ProvisionExceptionでラップさせたくありません。私はこれが便利だとわかりましたが、私は完全な絵を得ることができません。私はCheckedProviderインターフェイスを拡張しているインターフェイスを作成しました。今、このインターフェースの実装クラスに含まれるものを知りたいですか?CheckedProvider-Guiceの使い方

私はそれが私が

bind(TokenEncrypterProvider.class).toProvider(WHICHCLASS?.class); 

か、それは仕方ない場合は書くべきものを結合するために、今

@Provides 
public TokenManager getTokenManager(SomeClass obj) { 
    return new TokenManager(obj); 
} 

@CheckedProvides(TokenEncrypterProvider.class) 
    public SomeClass getEncrypter() { 
     try { 
      return new SomeClassFactory() 
        .buildEncryptionClient(AppConfig.findString("xyz")); 
     } catch (Exception e) { 
      throw new ExceptionInInitializerError(e); 
     } 
    } 

public class TokenManager { 
private final SomeClass obj; 
    @Inject 
    public TokenManager(SomeClass obj) { 
     this.obj = obj; 
    } 
... 
} 

として使用したい

public interface TokenEncrypterProvider <T> extends CheckedProvider<T> { 
    T get() throws ExceptionInInitializerError; 
} 

のように私のインターフェースが見えますCheckedProvidesを使用するには、正しいものを提案してください。

答えて

0

Guice 3+または4+を使用していると仮定しています。 CheckedProvides注釈を使用している場合は、プロバイダをバインドする必要はありません。

@CheckedProvidesメソッドを使用できるようにするには、モジュールのconfigure()メソッドにinstall(ThrowingProviderBinder.forModule(this))を追加する必要があります。

Documentation