Dagger:如果我每次都*想要*一个新实例怎么办?

2023-12-20

有趣的是,这个答案是多么难以找到。

我已经使用 Dagger - Android 一段时间了,并且已经设置了整个依赖关系图。我正在使用范围、限定符以及所有这些好东西。我不再是 Dagger 新手,但可以说我一直在 Android 设置中以相当标准的方式使用它,一切都进展顺利。

我第一次意识到我想自己手动请求图中某个类的新实例,并且我want每次都是一个新实例。

这样做的最佳方法是什么?我想知道是否有一种方法可以利用非 @Singleton/非作用域提供程序并调用某种create()我自己方法,或者最好自己创建一个工厂并使该工厂成为单例/作用域实例,并在需要时使用我的工厂获取新实例? [我应该提到这门课肯定会not有一个空的构造函数,因此需要注入我的注入图中定义的其他类的实例。]

(另外,如果答案是在 Android 的上下文中,这可能会很有帮助;也就是说,我在一个 ViewModel 中,并且需要在我的模块之一中定义的某个类的新实例。)


只要您不限制依赖项的范围,Dagger 就会为您提供一个新实例。

要手动获取依赖项的新实例,您可以注入Provider并使用它的get()方法,每次调用它时它都会给你一个新的实例。

模块部分并没有真正改变:

@Module
class AppModule {

    @Provides
    fun provideSomeObject(): SomeObject = SomeObject()
}

而在你的班级里

class SomeClass {
    // We don't inject the object anymore
    // @Inject lateinit var myObject : SomeObject

    // We'll inject it's provider
    @Inject lateinit var myObject : Provider<SomeObject>

    fun someMethod(){
        // Here, instance1 and instance2 are NOT same objects
        val instance1 = myObject.get()
        val instance2 = myObject.get()
    }
}

您可以阅读更多内容here https://proandroiddev.com/dagger-2-part-three-new-possibilities-3daff12f7ebf.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dagger:如果我每次都*想要*一个新实例怎么办? 的相关文章

随机推荐

  • 如何允许外部访问私有 Azure DevOps NuGet 源

    情况如下 DevOps Org A维护私有 NuGet 提要 DevOps Org B需要在其 Pipelines 中使用上述 feed 中的包 目前的解决方案包括 添加用户U from Org B作为客人Org A具有利益相关者角色的 D
  • 恒等函数在哪里以及为什么有用?

    我明白为什么函数组合很重要 它允许从小而简单的函数构建大而复杂的函数 val f A gt B val g B gt C val h f andThen g compose f and g 该成分符合identity and 关联性 law
  • 产品图片不显示 (Woocommerce)

    我的产品图片出现 但当我点击进入产品页面时 图片被隐藏 只有当我点击时才会出现 某些产品会在其他浏览器上显示 某些产品仅在 Microsoft Edge 上显示 Edit The real problem to that was cloud
  • 替换 PHPUnit 方法 `withConsecutive` (在 PHPUnit 10 中废弃)

    作为方法withConsecutive将在 PHPUnit 10 中删除 在 9 6 中已弃用 我需要将此方法的所有出现替换为新代码 尝试寻找一些解决方案 但没有找到任何合理的解决方案 例如 我有一个代码 this gt personSer
  • Django-graphene 同一模型有多种类型

    我有一个相当大的graphene djangoAPI 为两个应用程序提供支持 我限制对某些字段的访问的第一个方法是拥有多个DjangoObjectTypes对于同一型号 并使用fields限制每种类型可以访问哪些字段 示例Organizat
  • 节点应用程序 docker 映像在本地运行并在 Amazon ECS 上失败

    该应用程序可以在本地正常部署和运行很长一段时间 没有出现任何问题 然而 在 Amazon ECS 上 它似乎总是在空闲运行大约 2 30 分钟后崩溃 怎么了 Dockerfile Set the node alpine base image
  • 计算 SPARQL 中的个体数量

    我对 SPARQL 完全陌生 我想计算这个本体中的参与者数量 http data linkedmdb org directory actor http data linkedmdb org directory actor 我尝试了以下方法
  • 为什么 Mercurial 合并时很笨?如何使拉取/合并更改变得更简单?

    我刚刚开始使用 Mercurial 我想我正在尝试做一些非常简单的事情 一些应该非常典型的事情 但我很困惑为什么它如此复杂 以及为什么它不能按应有的方式工作 国际海事组织 我与朋友共享一些存储库 他做了一些更改并检查了几个文件并推送它们 现
  • 如何在asp.net mvc中回发后清除字段?

    我想知道如何在 ASP NET MVC 回发后清除字段 就像现在 当发生验证错误时 字段会保留用户输入的内容 不过 这很好 当没有发生验证错误时 我希望清除所有字段并显示一条消息 所以现在我使用 ViewData 成功显示 但不确定如何清除
  • Kotlin 多平台:JobCancellationException:父作业已完成

    我尝试编写一个使用 ktor 的 kotlin 多平台库 android 和 ios 因此 我在 kotlins 协程方面遇到了一些问题 When writing tests I always get kotlinx coroutines
  • 通过构建管道将 ASP.NET 应用程序部署到 Azure 应用服务

    我继承了一个 ASP NET 4 7 2 应用程序 它在我的计算机上成功运行和启动 我现在尝试通过 Azure DevOps Pipeline 将其部署到 Azure 应用服务 为了尝试做到这一点 我创建了一个 Azure 构建管道 其中包
  • mod_rewrite 在 URL 中带有尾随句点

    我的 Apache 上有一个 RewriteRule 以使 URL 变得友好 RewriteRule log script php u 1 QSA 这使得http example com log 用户名 http example com l
  • gzipped Parquet 文件在 HDFS for Spark 中可拆分吗?

    在互联网上搜索和阅读有关此主题的答案时 我收到了令人困惑的消息 有人可以分享他们的经验吗 我知道 gzipped csv 不是这样的事实 但也许 Parquet 的文件内部结构是这样的 Parquet 与 csv 的情况完全不同 使用 GZ
  • 通过斯坦福解析器提取所有名词、形容词形式和文本

    我试图通过斯坦福解析器从给定文本中提取所有名词和形容词 我当前的尝试是在 Tree Object 的 getChildrenAsList 中使用模式匹配来定位以下内容 NN paper NN algorithm NN information
  • 从 vscode 的集成终端中打开新的集成终端的命令是什么?

    我正在尝试设置一系列任务 每个任务都需要一个终端 为此 我需要使用一个命令从以前的集成终端打开一个新的集成终端选项卡 有没有办法在vs code集成终端中做到这一点 在 mac 中我会使用 open a Terminal 或者类似的东西tt
  • 在 pika / RabbitMQ 中处理长时间运行的任务

    我们正在尝试建立一个基本的定向队列系统 其中生产者将生成多个任务 一个或多个消费者将一次获取一个任务 处理它并确认消息 问题是 处理过程可能需要 10 20 分钟 而且我们当时没有回复消息 导致服务器与我们断开连接 这是我们消费者的一些伪代
  • 通知本地化不起作用

    我想本地化通知 并且我发现有这样的属性 例如 title loc key body loc key 用于本地化 I18N 通知标题和正文的 FCM 字段不起作用 例如 android priority normal notification
  • 结合来自 T-SQL 的 XML

    我有两个单独的表 TV 和 Receiver 我正在使用 FOR XML PATH 命令来构建 XML 我的问题是 我想将 TV XML Build 的输出与 Receiver XML Build 的输出结合起来 以创建一个 XML 输出
  • DataStax DDC 服务无法启动

    我刚刚安装了 DataStax Community Edition 但是当尝试运行以下命令时 C gt net start DataStax DDC Server 我得到以下回复 Thanks 我自己也遇到了同样的问题 请尝试以下操作 打开
  • Dagger:如果我每次都*想要*一个新实例怎么办?

    有趣的是 这个答案是多么难以找到 我已经使用 Dagger Android 一段时间了 并且已经设置了整个依赖关系图 我正在使用范围 限定符以及所有这些好东西 我不再是 Dagger 新手 但可以说我一直在 Android 设置中以相当标准