2016-11-14 2 views
2

Also verwende ich Dagger 2 für eine Android-Anwendung, aber lassen Sie mich versuchen, mein Problem ohne die Android-Terminologie zu erklären.Dolch 2 Ein Controller, abhängig von zwei Bereichen

Einfach, ich habe einen Controller, der die Benutzeroberfläche zeigt. Um die entsprechenden Werte mit ihren entsprechenden Einheiten anzuzeigen, muss dieser Controller von zwei Bereichen abhängig sein, was unmöglich ist.

hier der Fall ist: Ich

  • Ein Controller Komponenten haben, scoped mit @Activity
  • Eine Anwendung Comonent, scoped mit @Singleton
  • One DbComponent - eine Datenbank-Komponente, scoped mit @Application und hängt von ApplicationComponent ab.
  • Eine PreferencesComponent - wiederum Komponente, die mit @Application und abhängig von ApplicationComponent definiert ist.

Die ControllerComponent muss sowohl DbComponent abhängen, so kann mein Controller die Daten bekommen, die angezeigt werden muss, und auf PreferencesComponent die entsprechenden Einheiten zeigen (Celsius, Fahrenheit, m/s, km/h etc).

Was wäre der beste Weg, um meine Grafik zu implementieren?

Ich sah Fragen, wie bei mir, aber sie helfen nicht - question 1, question 2

+1

Die meisten dieser "Komponenten" sollte Module sein. Deshalb funktioniert es nicht. Lesen Sie mehr: http://StackOverflow.com/Questions/40545075/Dagger2-and-android/40546157#40546157 – EpicPandaForce

+0

Willst du mir eine Art "One Component per Scope" -Muster oder etwas anderes folgen? Ich denke, die Frage ist teilweise philosophisch. Warum sollte (zum Beispiel) eine DbComponent nur ein Modul sein, während etwas wie Netzwerkkomponente in einer separaten Komponente statt nur in einem anderen Modul sein sollte? – definera

+0

Die Netzwerkkomponente ist auch Singletone-Bereich, nicht wahr? Dann sollte es ein Modul sein, Teil der Singleton-Komponente.Wenn Sie diese Antwort sehen, war 'NetworkingComponent' nur eine normale' öffentliche Schnittstelle' mit den darin enthaltenen Bereitstellungsverfahren, keine tatsächliche Komponente. – EpicPandaForce

Antwort

3

Ein Controller Komponenten, scoped mit @Activity

Eine Anwendung Comonent, scoped mit @Singleton

Eine DbComponent - eine Datenbankkomponente, die mit @Application definiert ist und von ApplicationComponent abhängig ist.

Eine PreferencesComponent - wiederum Komponente, die mit @Application und abhängig von ApplicationComponent definiert ist.

In Wirklichkeit a component should exist per scope.

So sollten Sie haben zwei Komponenten:

1.) ApplicationComponent, die mit @Singleton

@Singleton 
@Component(modules={DbModule.class, PreferencesModule.class, AppModule.class}) 
public interface ApplicationComponent { 
    // provision methods 
} 

2.) ControllerComponent, die mit @Activity

@Activity 
@Component(dependencies={ApplicationComponent.class}, modules={ControllerModule.class}) 
public interface ControllerComponent extends ApplicationComponent { 
    // provision methods 
}