通常在开发Android应用程序时,将对象图(可能是匕首组件)存储在应用程序子类中。
val objectGraph = MySdk.Builder()
.build
但是在SDK(android-library
)的上下文中,我们无法访问应用程序子类。
此SDK将负责启动某些活动。这些活动需要访问对象图。如果不静态存储图形,怎么做呢?
答案 0 :(得分:1)
不确定这是否真的是你想要的答案,而且#34;静态存储图表",但它可能会有所帮助。
对于我目前正在工作的图书馆(对于客户来说)。我们使用如下的类来保存对象图而不是自定义的Application类:
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;
}
}
希望使用该库的集成商需要构建该类(通常在他们自己的自定义应用程序类的onCreate中)
public class CustomApp extends Application {
@Override
public void onCreate() {
super.onCreate();
MySdk mySdk = new MySdk(BuildConfig.CLIENT_KEY, this);
}
}
之后,依赖关系可以从任何地方获得,如下所示:
Authentication authentication = MySdk.getAuthentication();
(ObjectGraph当然是你想要的,Dagger组件或家庭成长。我们并不想将Dagger2放入库中,所以我们现在使用这样的东西:https://github.com/erdo/asaf-project/blob/master/example01databinding/src/main/java/foo/bar/example/asafdatabinding/ObjectGraph.java)