2017-12-07 2 views
0

Normalerweise speichern Sie bei der Entwicklung einer Android-Anwendung Ihr Objektdiagramm (möglicherweise eine Dolchkomponente) in Ihrer Anwendungsunterklasse.Wo sollten wir das Wurzelobjektdiagramm speichern, wenn Sie eine Bibliothek entwickeln?

val objectGraph = MySdk.Builder() 
    .build 

Aber im Zusammenhang mit einem SDK (android-library), wir haben keinen Zugriff auf die Anwendung Unterklasse.

Dieses SDK wird für das Starten bestimmter Aktivitäten verantwortlich sein. Diese Aktivitäten benötigen Zugriff auf das Objektdiagramm. Wie kann dies ohne statische Speicherung des Graphen gemacht werden?

Antwort

1

Nicht sicher, ob dies wirklich die Antwort ist, die Sie wollen, da es "die Grafik statisch speichert", aber es könnte trotzdem helfen.

Für die Bibliothek arbeite ich gerade (für einen Kunden). Wir verwenden eine Klasse wie die folgenden den Objektgraphen statt einer benutzerdefinierte Anwendungsklasse zu halten:

public final class MySdk { 

    private static ObjectGraph objectGraph; 

    public MySdk(String clientKey, Application application) { 

     objectGraph = new ObjectGraph(); 
     objectGraph.buildGraph(clientKey, application); 

    } 

    public static Authentication getAuthentication(){ 
     return getObjectGraph().get(Authentication.class); 
    } 

    private static ObjectGraph getObjectGraph(){ 

     if (objectGraph == null) { 
      throw new IllegalStateException("The constructor must be called first"); 
     } 

     return objectGraph; 
    } 

} 

Integratoren wollen die Bibliothek verwenden müssen, diese Klasse konstruieren (in der Regel in der onCreate ihrer eigenen benutzerdefinierte Anwendungsklasse)

public class CustomApp extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     MySdk mySdk = new MySdk(BuildConfig.CLIENT_KEY, this); 
    } 
} 

Danach sind die Abhängigkeiten von überall verfügbar wie folgt:

Authentication authentication = MySdk.getAuthentication(); 

(ObjectGraph ist, was Sie wollen natürlich, Dolch Kompo Nent oder selbst angebaut. Wir wollten Dagger2 nicht wirklich in die Bibliothek stellen, also benutzen wir so etwas im Moment: https://github.com/erdo/asaf-project/blob/master/example01databinding/src/main/java/foo/bar/example/asafdatabinding/ObjectGraph.java)

Verwandte Themen