gpt4 book ai didi

android - Dagger 可以用来在 Content Provider 上执行注入(inject)吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:57 24 4
gpt4 key购买 nike

我最近一直在将 Dagger 集成到一个使用 ContentProviders 的项目中。我在我的自定义应用程序对象中创建了一个 ObjectGraph 实例,基本上在每个托管组件中:

  • Activity ,
  • fragment ,
  • 服务

... 然后,我调用 getApplication(),向下转换为我的自定义 Application 对象,并通过我的 Application 类中的一些自定义实现强制注入(inject)。这似乎是根据我在 Square 的人发布的示例执行注入(inject)的规定方法。

此模式不适用于 ContentProvider 实例,因为它们的生命周期与 Application 对象的生命周期并不像可预测的那样相关,即 ContentProviders 可以,而且正如我经常观察到的那样 ,在创建 Application 对象之前创建(出于我尚未理解的原因)。

所以...有没有人有使用 Dagger 注入(inject) ContentProvider 的好方法?到目前为止,我通过在每个 ContentProvider 的接口(interface)方法(插入、查询、更新、删除)的开头调用 isInjected() 来实现它...基本上是一种懒惰初始化的 hacky 形式.但这似乎远非理想。是否有更规范的方法来注入(inject) ContentProvider?

最佳答案

Application 子类只是一个约定,因为它通常是第一个创建的对象。我们的应用程序没有内容提供者,这就是我们使用它们的原因。没有任何内容表明您不能将其放在其他地方。

您可以只使用传统的单例模式来实例化和保存对 ObjectGraph 的引用。

public final class Dagger {
static ObjectGraph og;

static ObjectGraph og() {
if (og == null) {
og = ObjectGraph.create(..);
}
return og;
}
}

第一个访问的人将初始化将在进程的生命周期内使用的实例。

如果您的内容提供商与您的主应用程序处于不同的进程中,此解决方案仍然有效。或者您可以在创建内容提供者时简单地创建图表,因为它将是唯一的消费者。当然,正常的多进程规则仍然适用,因此不会与其他进程共享任何实例。

关于android - Dagger 可以用来在 Content Provider 上执行注入(inject)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23871960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com