问题标签 [zenject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1789 浏览

unity3d - 通过工厂或池使用子容器实例化随机或选择的预制件

我有一系列预制件,我希望能够通过 Zenject Factory 实例化随机挑选的预制件,并在它们的子容器中执行它们的绑定。

我想要做的与 Zenject 文档中的代码示例相同,但用于随机选择的预制件。 https://github.com/modesttree/Zenject/blob/master/Documentation/SubContainers.md#using-game-object-contexts-no-monobehaviours

我能够部分使它与

但这很尴尬,在这种情况下,我想我没有使用子容器的优势。并且预制件也会在一个空的 GameObject 中生成。我想要实现的是能够使用 ShipInstaller 进行子容器绑定。

0 投票
1 回答
373 浏览

unity3d - 通过子容器安装程序注入 IPoolable 外观对象的运行时参数

问题是我在子容器安装程序构造函数中没有得到正确的值。例如,如果我用这样的工厂创建我的可池外观对象:QuxFactory.Create(3.1415);然后在 QuxInstaller 构造函数中,我得到 0 作为浮点参数而不是 3.1415.. 但是如果我没有绑定我的QuxFactorylike ,我会得到预期的结果FromPoolableMemoryPool。所以我很困惑如何在子容器安装程序中获取我的参数以进一步注入子容器的依赖项?

这是我正在玩的 Extenject 文档中的代码:

我有我的工厂注入,我正在实例化这样的新实例

此外,当我将 float 注入到 ShipInputHandler 时,它注入为 0;

而且我认为这一行的文档页面中有一个“错字”:

它不适用于FromMonoPoolableMemoryPool<Foo>(),因为我们有一个参数 Vector3。它应该是FromMonoPoolableMemoryPool<Vector3, Foo>()FromMonoPoolableMemoryPool()。如果我在这里是正确的..

0 投票
1 回答
2169 浏览

c# - 如何使用 zenject 在 Unity3d 中将 MonoBehaviour 类注入到非 Monobehaviour?

我想尽可能地组织我的代码,但我在组织方面遇到了一些麻烦。我尝试使用 SOLID 原则并制作单独的实体。我想使用 MVVM 来查看(以及统一焊接)和 DI 容器(以及 zenject)。

这是我的第一个项目,我正在尝试组织代码。

我的问题是如何使用类中的 zenject 容器作为静态类LoginViewModel注入。LoginControllerGameInstaller

0 投票
1 回答
1439 浏览

unity3d - 如何使用 Zenject 将非 MonoBehaviour 对象列表绑定到管理器类

我在我的游戏中使用 Zenject 进行依赖注入,我陷入了僵局。

让我描述一下我当前的设置:

我有几个自己的角色,GameObjectContext负责CharacterInstaller将 aCharacterController注入到CharacterPresenter.


我想做的是将CharacterController类的所有实例也注入到使用List Bindings的“管理器”类中。这位经理不是我角色的父母,我可能需要几个经理。

我发现解决我的问题的更接近的事情是:

• 将ZenjectBinding组件附加到我的角色并指定我需要的上下文。
→ 不能工作,因为CharacterController它是一个普通的 C# 类并且ZenjectBinding唯一绑定组件

Context•在CharacterInstallerand 调用中声明 a OtherContext.Container.Bind...
→ 失败,因为OtherContext.Container为空

• 调用Container.Bind<CharacterController>().FromComponentsInHierarchy()我的经理安装程序
→ 不工作,因为CharacterController不是组件

• 使用工厂
→ 我不能使用它,因为我的对象是在编辑时放置在编辑器中的

Container.ParentContainers在我中使用CharacterInstaller
→ 无法使用,因为我的经理不是我的父容器CharacterInstaller.Container

我愿意接受建议,如果需要,可能会重构我的设置。提前致谢

0 投票
1 回答
958 浏览

c# - Zenject 将普通类注入 Monobehaviour

我正在尝试将纯 C# 类注入 Mobobehaviour,但是会抛出“在构建类型为 'UserDirijible' 的对象时无法解析 'HeightSystem'。对象图:UserDirijible”异常。

HeightSystemInstaller 附加到场景中的空对象。什么可能导致此错误?以前,Monobehaviour 类注入工作正常。我主要使用 Dagger 2,直到现在找不到关于将纯 C# 类注入 Monobehaviours 的文档

0 投票
0 回答
78 浏览

c# - c#自定义属性可以实现订阅/取消订阅方法吗?

我正在使用 Zenject,但这也适用于其他框架。我对必须复制/粘贴的样板代码不感兴趣。在这种情况下,OnEnable 应该订阅一个信号,OnDisable 应该取消订阅。可以写一个属性来使它更紧一点吗?

前任:

我希望能够简化这个也许更像这样:

这甚至可能吗?

0 投票
1 回答
255 浏览

c# - 在场景中注入游戏对象

所以我有带有GameState组件的游戏对象,并且我有带有SceneContextGameInstaller组件的游戏对象。GameInstallerGameState的字段,我也将 GameInstaller 引用monoinstallers。当我从 prefab 实例化玩家游戏对象时 - 在GameState字段上具有 [Inject] 属性,并尝试使用GameState组件访问场景中的那个非常游戏对象 - 我得到空引用。

这就是我绑定的方式,这就是我注入的方式(它是我的敌人/玩家的基类)

符合 gameState.OnGameLost - 我有一个空参考。我在基类中注入GameState ,它源自 monobeh。

这就是我用播放器/敌人脚本实例化预制件的方式

}

0 投票
1 回答
495 浏览

unity3d - 使用 zenject 在 Unity 中注入添加加载的场景

如何使用 zenject 将依赖项注入到附加加载的场景中?

0 投票
0 回答
818 浏览

zenject - 如何使用 Zenject 最好地自动化 ScriptableObject 注入?

我希望用户能够在播放模式之外创建我的 ScriptableObject 资产,以便他们可以将它们绑定到场景中的对象。由于我不希望 Zenject 创建 ScriptableObjects,因此工厂解决方案不是我想要的。因此,我必须以某种方式将这些脚本对象的实例提供给 Zenject 安装程序并使用“QueueForInject”。这是我发现的两种方法:

A) 通过检查器窗口手动将这些脚本对象添加到安装程序。例子:

B) 使用 Unity 的 AssetDatabase 和 Resources API 查找所有脚本对象实例,然后遍历列表到 QueueForInject。例子

对于选项 A),最终用户必须记住手动将脚本对象放置在他们创建的每个新脚本对象的列表中。我宁愿找到一种自动化的方式,这样用户就不必知道/记住这个额外的手动过程。

使用选项 B) 我得到了一个很棒的自动化解决方案。但最终用户必须记住将每个 ScriptableObject 资产文件存储在名为“Resources”的目录中,因为这是 Resources.Load API 找到实例的唯一方式。如果找不到,我可以警告用户,这很好。但他们仍然被迫遵守以删除警告。

如果必须,我可以接受选项 B,但我真的想更进一步,让它对最终用户完全不可见。有没有人为 Play Mode 之外存在的 ScriptObjects 提出了一个更巧妙的自动化解决方案?

0 投票
1 回答
1771 浏览

unity3d - 使用 Zenject 注入带有接口的实现

我正在尝试在 Unity 中使用 Zenject。我有一个接口和它的几个实现。

我想用 ID 注入,但实现将具有刻度接口,因为它不是 MonoBehaviour。

所以我有一个IAttacker接口和一个MeleeAttackImpl实现。

我想添加

但它创建了 2 个不同的对象,而不是具有 Tick 接口并将它们绑定到IAttacker.