2016-04-04 18 views
27

Date le seguenti classiCome liberarsi di Dagger 2 warning "Generazione di un MembersInjector"

abstract class AbstractClass { 
    @Inject SomeDependency someDependency; 
} 

class SomeClass extends AbstractClass { 
    @Inject AnotherDependency anotherDepenency; 

    public void onCreate() { 
     component = // Get component instance somehow 
     component.inject(this); 
    } 
} 

in Dagger 2 quando si inietta dipendenze in una classe che si estende da una classe base astratta che contiene anche le dipendenze, Dagger mostra un avvertimento del tipo Generating a MembersInjector for AbstractClass. Prefer to run the dagger processor over that class instead. durante la compilazione.

Tuttavia se sovrascrivo/implementare onCreate() in AbstractClass e chiamare l'iniezione di dipendenza anche lì, la dipendenza someDependency sarà iniettato due volte che potrebbe condurre ad un comportamento imprevisto. Una volta in onCreate() di AbstractClass e una volta in onCreate() di SomeClass.

Qual è la soluzione migliore per sbarazzarsi di questo avviso evitando la duplicazione dell'iniezione delle dipendenze?

risposta

2

A partire dal Dagger 2.9 questi avvertimenti sono disattivati ​​per impostazione predefinita.

1

soluzione potrebbe essere: definire onCreate() della classe astratta solo

+1

Sfortunatamente questo non è possibile poiché le dipendenze dichiarate nella sottoclasse non possono essere iniettate dalla classe astratta in 'onCreate()'. –

+0

È nella documentazione? O hai controllato le fonti dei pugnali? Non vedo perché sarà impossibile. La mia piccola libreria DI esegue questo problema senza problemi (nel caso in cui sia necessario iniettare vies e proprietà, siete i benvenuti: https://github.com/ko5tik/andject/blob/master/src/main/java/de/pribluda/android /andject/BaseInjector.java) –

+0

Dagger 2 genera il codice per l'iniezione delle dipendenze durante la compilazione. Pertanto, l'iniezione di dipendenze in una sottoclasse da una superclasse richiederebbe a Dagger di eseguire un controllo dell'istanza, poiché più classi con dipendenze diverse potrebbero estendersi dalla superclasse. Dubito che Dagger sia capace di questo, né che gli architetti vogliano eseguire questi controlli. –

Problemi correlati