2017-12-07 1 views
0

일반적으로 Android 응용 프로그램을 개발할 때 응용 프로그램 하위 클래스에 객체 그래프 (대거 구성 요소)를 저장합니다. 라이브러리를 개발할 때 어디에 루트 객체 그래프를 저장해야합니까?

val objectGraph = MySdk.Builder() 
    .build 

하지만 SDK (android-library)의 맥락에서

, 우리는 응용 프로그램 서브 클래스에 액세스 할 수 없습니다.

이 SDK는 특정 활동을 시작하는 데 책임을집니다. 이러한 활동은 객체 그래프에 대한 액세스가 필요합니다. 어떻게 그래프를 정적으로 저장하지 않고이 작업을 수행 할 수 있습니까?

답변

1

정말로 "그래프를 정적으로 저장"할 때 원하는 답변이 맞는지 확실하지 않지만 그다지 도움이되지 않을 수도 있습니다.

내가 현재 (클라이언트 용으로) 작업하고있는 라이브러리의 경우. 우리는 대신 사용자 지정 응용 프로그램 클래스의 객체 그래프를 유지하기 위해 다음과 같은 클래스를 사용하여 라이브러리를 사용하고자하는

통합이 (자신의 사용자 지정 응용 프로그램 클래스의에서 onCreate에서 일반적으로) 그 클래스를 구성 할 필요가

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; 
    } 

} 

Authentication authentication = MySdk.getAuthentication(); 

(ObjectGraph는 물론 원하는대로, 단검의 콤포넌트입니다 다음과 같이

public class CustomApp extends Application { 

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

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

그 후, 종속성 어디서나 사용할 수 있습니다 nent 또는 가정 재배. 우리는 Dagger2를 라이브러리에 넣고 싶지 않았기 때문에이 순간에 다음과 같이 사용합니다 : https://github.com/erdo/asaf-project/blob/master/example01databinding/src/main/java/foo/bar/example/asafdatabinding/ObjectGraph.java

관련 문제