【问题标题】:How to use Zenject to inject a dependency to a class, whose instance is defined as a field in another class如何使用 Zenject 将依赖项注入一个类,该类的实例被定义为另一个类中的字段
【发布时间】:2022-12-05 12:32:46
【问题描述】:

我想要一个类作为另一个类的集合。所以假设我有一个 FooBarCollection,它有一个名为 FooBarItems 的集合。我可以绑定 FooBarCollection 并注入它。问题是为了保持整洁,我也想在 FooBarItem 类中进行一次注入,但为了让它工作,我需要使用 DiContainer 进行实例化,这也有问题:

  • 我无法在定义字段的同一行中执行基于 DiContainer 的实例化,因此我需要为集合中的每个项目编写两行代码。我想避免这种冗余,并且取决于记住要为每个项目添加的两行代码。
  • 将参数传递给 DiContainer 实例化不是类型敏感的。

那么有什么方法可以:

  • 我可以使用 Zenject 来注入 FooBarCollection
  • 用一行代码添加 FooBar 集合下的每个 FooBar 项,同时仍然能够在 FoobarItem 中注入一个依赖项 ?

有任何想法吗?

【问题讨论】:

  • 当你在谈论一项特定资产时,我无能为力,只是给了我 5 美分。通过纯代码进行 DI 并仅公开回答统一消息所必需的内容不是一种选择吗?或者可以使用 unity 编辑器作为注入器,创建一个可编写脚本的对象作为普通类的集合,然后通过 API 添加它们
  • 这些不是我想在可编写脚本的对象中序列化的项目,我认为这甚至不能解决问题,因为我仍然希望注入在这些项目中起作用。我不确定您所说的“通过纯代码进行 DI 并仅公开回答统一消息所必需的内容”是什么意思。但无论如何感谢您的投入。

标签: c# unity3d dependency-injection zenject


【解决方案1】:

恐怕我不了解具体情况。
例如,我认为它满足你的愿望绑定一个空的 FooBarCollection 和一个 FooBarItems 的工厂,然后从 Spawner 类调用工厂来向 FooBarCollection 添加元素?

或者,使用 FromMethod(Func 方法)将实例创建转移到方法的构造可能很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2023-01-19
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多