问题标签 [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 投票
0 回答
1133 浏览

c# - ZenjectException:无法解析“A”。对象图:

我收到一个ZenjectException: Unable to resolve 'Facade'. Object graph: 我无法理解的错误。

我一直在关注这个例子,但我无法让我的代码工作。

我有一个包含以下组件的预制件:

  • Facade
  • FacadeInstaller
  • Game Object Context(参考FacadeInstaller上述)

Facade班级:

FacadeInstaller班级:

Argument班级:

在场景中,我有一个SceneContext引用以下安装程序:

其中prefab在检查器中链接到我上面详述的那个。

如果我离开,场景验证成功。

现在,当我使用以下组件向场景添加另一个游戏对象时,问题就出现了:

并且场景验证失败并出现错误:

我的设置有什么问题?

0 投票
1 回答
321 浏览

unity3d - 是否有类似于 ORM 的 Unity 使用带有 Zenject 的存储库模式?

长格式,TL;DR 下面

我目前正在使用 Zenject 开发游戏,并将我的 UI 和游戏架构设计为与 Web 应用程序非常相似,其中有IConversationRepository-Interfaces 提供对Conversations 等数据的访问,方法如GetConversationById(...).

到目前为止,接口是由返回硬编码数据的假人实现的,但是当我进一步进行时,这必须改变。

如果这是一个 Web 应用程序,我将只使用 ORM 并让它处理对象的查询和加载,所以我的问题是 Unity / Zenject 是否也存在这种情况,如果不存在,什么时候实现数据访问的正确方法是什么?使用 Zenject。

更新(回应与@Fattie 的有益讨论)

我基本上感兴趣的是一种通用的方式来加载引用其他对象的对象,并能够查询它们。

举个例子,想象一个Conversation包含许多ConversationItems 的对象,每个对象都有一个 Speaker 类型的字段Person。然后我希望能够执行这样的操作:

这里重要的是,如果多个SpeechItems 的说话人相同,则每个引用的对象也应该相同,这使得简单地反序列化 JSON 是不可行的。

TL;DR 有没有类似 ORM 的东西可以用来实现存储库模式?如果没有,我应该如何访问数据?

0 投票
1 回答
55 浏览

c# - ZenjectUnitTestFixture 在 [Setup] 之后没有重新创建单例

我正在为 Extenject (Zenject) 编写单元测试并使用 ZenjectUnitTestFixture,但看起来我的一些单例在测试 [Setup] 后没有被重新创建。我设置了断点并检查了容器注册是否被重置。但是,其中一个注入的单例中有一个字典,该字典在创建时被初始化,并且仅在第一次测试时才被初始化。对于后续测试,它仍然具有先前测试的内容。有谁知道为什么我的单身人士还在闲逛?我会认为这是一个参考问题,就像仍然有对我的单例的引用,所以即使容器重置实例仍然存在,但我认为即使在这种情况下,重置容器也会注入新的单例实例。有人对我可以从哪里开始寻找有任何建议吗?我绝对可以在我的单例中添加一些东西,让我在每次测试开始时重置它,但我担心如果我的测试中的其他单例发生这种情况,该实例不会被重新创建。

0 投票
0 回答
39 浏览

c# - 让 Zenject Factory 返回模拟实例

我有一个班级 MyViewModel

在我的主应用程序安装程序中,我有以下代码来使用 Zenject 的内置工厂 + 池功能来池 MyViewModel 类的实例

在另一堂课中,我有以下注射

我用

获取 MyViewModel 类的池化实例

我的问题:我有另一个测试安装程序,我希望工厂返回 MyViewModel 的模拟实例,但不知道该怎么做。我尝试将工厂绑定更改为

对 MyViewModel.Factory 也进行了相应的更改,但 Zenject 说我只能将非抽象类型传递给 BindFactory 方法。这是否可以实现这一点(让工厂返回模拟实例)而不必使用 IFactory 并自己处理池功能?

0 投票
1 回答
127 浏览

unity3d - Zenject 为什么需要使用 InstallerPrefabs 而不是我的 Installer?什么是 InstallerPrefabs?

我创建了安装程序,使用脚本创建了一个预制件,然后将其附加到 SceneContext。但是当我运行时出现此错误

“ZenjectException:断言命中!在上下文'SceneContext'的安装程序属性中找到名称为'Installer'的预制件。您应该为此使用属性'InstallerPrefabs'。”

有什么建议么?

0 投票
1 回答
135 浏览

unity3d - Unity 19.4.15 Zenject 9.8 CS1513:但已关闭所有函数/类

[编辑]

移动 [inject] 标签不起作用 //<--因为是 [Inject]

现在它有两个错误:

Assets\player\playercontroller\armory\rifle.cs(10,10):错误 CS0246:找不到类型或命名空间名称“injectAttribute”(您是否缺少 using 指令或程序集引用?)

Assets\player\playercontroller\armory\rifle.cs(10,10):错误 CS0246:找不到类型或命名空间名称“inject”(您是否缺少 using 指令或程序集引用?)

新代码在这里。


在开始之前,我不得不感谢大家帮我解决问题

我已经看过Getting CS1513 } 预期的,但所有 的大括号都在那里但它不起作用。

这是我的代码:

0 投票
1 回答
93 浏览

c# - 如何处理实例化的依赖关系?

处理实例化的依赖关系。

所以一个普遍的问题:如何处理实例化的依赖关系?

假设我有两个功能:

随着:

解决这种依赖关系的正确方法是什么,它解耦了两个类,是可扩展的和可测试的?

我想使用 Zenject,但我不确定这是否对这个特定问题有好处?

另外我猜单身人士在窗外?

0 投票
0 回答
326 浏览

c# - 尝试在 Zenject 子容器上运行多个 Zenject 安装程序,其中安装程序位于单独的 asmdef 模块中

我的 Unity 项目在不同的 asmdef 程序集定义中分为一个核心项目和几个模块。每个模块都有一个对 Core 的程序集引用。

我的核心安装程序看起来像:

如您所见,我使用 Zenject DI 将 a 绑定Ship到 a Ship.Factory,使用 theShipInstaller绑定对船的子容器的依赖项。

问题是可以绑定存在于程序集中但不在任何模块中ShipInstaller的依赖项。Core

我已经设法通过创建一个IShipInstaller接口来解决这个问题,该接口Core可以由其他模块中的安装程序实现,以便在创建 Ship 对象时向其注入额外的依赖项。其他模块有他们自己的安装程序,然后可以将他们的船舶安装程序绑定到该接口,并且它们都在运行时作为列表注入到船舶中。

例如

这行得通,但这样做的问题是它无法通过 Zenject 验证,因为在验证期间我相信它让Container.Resolve方法只返回一个默认值(null 或空列表)。

根据文档,安装程序可以运行另一个安装程序,Installer.Install(Container)例如我的 OptionalShipInstaller应该如下所示:

并且ShipInstaller应该像这样运行静态安装方法:

但是,它OptionalShipInstaller是不可见的,ShipInstaller因为它存在于一个未在其中引用的单独程序集中Core- 模块依赖于核心,而不是相反!

所以基本上,我有没有办法在绑定后将另一个安装程序附加到船舶工厂?或者我可以解决此问题的任何其他方法将不胜感激。

0 投票
1 回答
54 浏览

unity3d - 如何实例化预制件并使用 PHOTON 设置其依赖项

我试图用光子位创建一个预制件我有这个问题 在此处输入图像描述

那是因为我试图实例化的预制件需要来自场景的一些依赖关系,比如相机 在此处输入图像描述 在此处输入图像描述

有什么想法我该怎么做?:/

非常感谢!

0 投票
0 回答
107 浏览

c# - 当涉及到 zenject 时,如何在已创建的对象中注入依赖项?

我已经通过 Activator.CreateInstance() 创建了一个对象。如何注入该对象具有的依赖项?作为参考,我使用了 Unity3d 的 c# 和 zenject。

我应该使用 GetTask() 的 Activator.CreateInstance() 来获取任务。然后,我只想将一些序列化程序(在 zenject 的容器中注册)注入到已经创建的 LoginTask 中。