我最近一直在将Dagger集成到一个使用ContentProviders的项目中.我在自定义Application对象中创建了一个ObjectGraph实例,基本上在每个托管组件中:
...然后,我调用getApplication(),向下转换到我的自定义Application对象,并通过我的Application类中的一些自定义实现强制注入.这似乎是根据我在Square看到的人发布的样本进行注射的规定方法.
这种模式不适用于ContentProvider实例,因为它们的生命周期与Application对象的生命周期没有预期的关联,即ContentProviders可以,并且正如我经常观察的那样,是在创建Application对象之前创建的(对于我尚未理解的原因).
所以...有没有人有一个使用Dagger注入ContentProviders的好方法?到目前为止,我已经通过isInjected()在每个ContentProvider的接口方法(插入,查询,更新,删除)的开头调用...基本上是一种懒惰的初始化形式.但这似乎远非理想.是否有更规定的方法来注入ContentProviders?
Jak*_*ton 11
该Application子类只是一个惯例,因为它通常是创建的第一个对象.我们的应用程序没有内容提供商,这就是我们使用它们的原因.没有什么可以说你不能把它放在其他地方.
您可以使用传统的单例模式来实例化并保持对它的引用ObjectGraph.
public final class Dagger {
static ObjectGraph og;
static ObjectGraph og() {
if (og == null) {
og = ObjectGraph.create(..);
}
return og;
}
}
Run Code Online (Sandbox Code Playgroud)
第一个访问者将初始化将用于进程生命周期的实例.
如果您的内容提供商与主应用程序处于不同的进程,则此解决方案仍然有效.或者您可以在创建内容提供商时简单地创建图表,因为它将是唯一的消费者.当然,正常的多进程规则仍然适用,因此不会与其他进程共享任何实例.
| 归档时间: |
|
| 查看次数: |
1701 次 |
| 最近记录: |