2013-06-06 3 views
5

Sto usando guice e ho visto un esempio che utilizza binder().requireExplicitBindings()here.
L'esempio si presenta così:è obbligatorio/consigliato utilizzare requireExplicitBindings

Injector injector = Guice.createInjector(new SandwichModule(), new AbstractModule() { 
    @Override 
    protected void configure() { 
     binder().requireExplicitBindings(); 
     bind(GuiceFilter.class); 
    } 
}); 

che causano eccezioni come

com.google.inject.ConfigurationException: Guice configuration errors: 

1) Explicit bindings are required and ... 

E 'obbligatorio l'uso di esso, o semplicemente raccomandato? e se è solo raccomandato mi chiedo solo perché usarlo?

risposta

3

Non è obbligatorio (quindi sarebbe un'impostazione predefinita senza necessità di attivazione) né richiesto. Normalmente, quando usi il guice, vuoi avere tutta la "magia" per aiutarti a incollare la tua applicazione insieme. Quindi il comportamento predefinito è: non richiedere esplicitamenteBindings. Ma ogni tanto ti accorgi che gli automatismi della guia si mettono sulla tua strada. In quelle rare occasioni, dovresti usare l'interruttore di richiesta. Non ho letto tutto l'articolo che hai fornito, quindi non posso dire se hanno a che fare con uno di questi "casi speciali" o se usano solo una bandiera senza veramente considerare il perché. In ogni caso, se scrivi i tuoi moduli vincolanti, lascia perdere.

1

penso che questo interruttore potrebbe essere molto utile per puntare più veloce per errori di programmazione in cui è erroneamente annotato qualcosa come iniettabili che non devono essere iniettati, come qui:

@Inject 
private SomeClass someInstance = new SomeClass(12); 

Se SomeClass ora ha anche un no pubblica -strument constructor, Guice avrebbe semplicemente sovrascritto l'istanza specifica senza dire una cosa.

Tuttavia, l'utilità dell'iniezione automatica di solito pesa molto più di questo, quindi per questo specifico esempio è sufficiente fare attenzione a non "iniettare tutto" per caso :)