gpt4 book ai didi

android - Dagger2 Activity 范围,我需要多少个模块/组件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:30:39 26 4
gpt4 key购买 nike

我有几个关于自定义范围的问题:

  1. 我正在使用 MVP architecutre,我需要将不同的演示者注入(inject)到不同的 Activity 中。为此,我创建了@ActivityScope。这是否意味着我必须为每个 Activity 创建一个单独的模块/组件?
  2. 如果我仍然负责创建和释放这些依赖项,自定义范围注释的目的是什么?不确定我是否正确,但我可以在我的所有模块/组件中使用 @Scope123,这不会有任何区别。

最佳答案

Does it mean that I must create a separate module/component for every activitiy?

是的。没有。

如果您想提供 Activity 范围内的依赖项,至少您需要为每个 Activity 创建一个新的组件对象,例如Activity 本身、LoaderManager 或类似的东西,因为范围将与 Activity 一样长。

您是否需要为您的每一项 Activity 使用模块和组件的问题在很大程度上取决于您的架构。您也可以制作一个通用的 ActivityModule 来提供您可以重复使用的模型、演示者和 View 。

你也可以只使用一个 Component 例如如果只需要 Activity 的基本依赖项,例如 LoaderManagerActivity 本身,那么您可以编写一个 ActivityModule 来提供这些基础对象。然后,您可以将此模块与您的组件一起使用以提供依赖项。如果您的 Presenter(及其依赖项)可以通过构造函数注入(inject)创建,您可以使用单个组件和模块来处理所有 Activity 。

如果您的演示者和 View 是实现的接口(interface),您将需要创建一个提供实际实现的模块。

What is the purpose of custom scope annotations if I'm still responsible for creating and releasing those dependencies?

范围用于使这些依赖项的管理更容易。如前所述, Activity 范围随着 Activity 被销毁而消亡。通过拥有这些范围内的依赖项,您可以确保没有任何内容依赖于具有更高范围/生命周期并可能导致内存泄漏的 Activity。

此外,我喜欢将其视为可以热交换并“丢弃”的依赖包。一个很好的例子是一个 @UserScope ,它将保存用户数据,他的登录名, session 数据,...
如果我切换用户,我只需要在用户范围内或更小范围内丢弃所有内容(关闭 Activity ,删除 UserComponent),并且与用户相关的所有内容都将消失。下一个可以登录,副作用的风险很低。

作用域主要是编译时检查,帮助您将层次结构引入依赖项,因为编译器所做的只是检查其中没有循环,并且没有任何东西从作用域请求依赖项访问权限。

关于android - Dagger2 Activity 范围,我需要多少个模块/组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35314682/

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