Pugnale non gradisce i costruttori che lanciano eccezioni

Sto cercando di utilizzare Dagger nella mia applicazione android per semplificare l'iniezione di dipendenza. Sembra che Dagger 2.0 non support i costruttori che lanciano eccezioni. c'è una soluzione a questo?

Non sembra fattibile rifatturare e creare un metodo init che butta invece eccezioni, perché call init su tutta la catena di oggetti dipendenti reintroduce i problemi che il pugnale risolve.

  • Come includere un layout due volte in Android?
  • Variabile / costante globale in React native
  • RTSP youtube link
  • Confronto delle immagini utilizzando Android - OpenCV
  • Android Listview ArrayAdapter con due layout
  • Distriggers DatePickerDialog sul button di ripristino
  • L'azione ActionBar di Android ToolLayout di Switch causa il salto del text quando si preme il menu
  • Ottenere il path del file da un'image in ImageView
  • Gerarchia di events di touch di Android Live Wallpaper
  • Come posso inserire le tabs FragmentTabHost nella parte inferiore dello schermo?
  • Come dividere il layout lineare in due colonne?
  • API di Google Maps v3 in PhoneGap: i marcatori non disegnano correttamente dopo la mossa
  • 2 Solutions collect form web for “Pugnale non gradisce i costruttori che lanciano eccezioni”

    Non è chiaro al codice generato che cosa dovrebbe succedere quando viene generata un'exception durante un constructor. Se le classi che dipendono da istanze di questa class siano obbligate a prendere l'exception in qualche modo? Se l'applicazione si blocca se l'exception viene gettata? In generale, l'Iniezione di Dependenza tenta di separare la class dipendente dal conoscere la strategia di costruzione delle sue dependencies e questo violerebbe questo principio.

    Un'opzione è quella di utilizzare un @Module che @Provides le istanze. Quindi, se l'exception viene generata, il metodo @Provides può restituire un default sensibile. Puoi anche considerare l'utilizzo di Optional<> per indicare che l'object non può essere costruito correttamente.

    In alcuni casi è ansible creare le istanze separatamente, implementando la propria gestione delle eccezioni, quindi passarle nel module.

    Esempio:

     @Module public class MyModule { private final Configuration config; public MyModule(Configuration config) { this.config = config; } @Provides @Singleton Configuration configuration() { return this.config; } @Provides @Singleton SomethingElse somethingElse(Configuration config) { return new SomethingElse(config); } } 

    e passate l'istanza dall'esterno

     try { config = new Configuration(...); } catch (...) {} ServiceComponent serviceComponent = DaggerMonkMain_ServiceComponent.builder() .myModule(new myModule(config)) .build(); 

    Questo è solo pratico se il numero di classi che possono buttare eccezioni durante la creazione è piccolo.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.