问题标签 [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 回答
130 浏览

unity3d - 使用 Zenject 连接 Mapbox SDK

我正在使用 Mapbox SDK 和 RoadArchitect 并尝试构建一些使用 Mapbox 生成矢量列表的游戏初始化代码,然后获取该矢量列表并调用 Road Architect 中的函数来生成道路 GameObjects。为了做到这一点,我需要等到 Mapbox 完成它的工作,然后才能运行代码来生成道路。我将 Mapbox MergedModifierStack 扩展为 ObservedModifierStack 并添加了 StackComplete 事件。

我当前的场景设置有 2 个相关的游戏对象:

  • 地图(地图盒AbstractMap
    • 其中包含(伪属性路径,可能不是 100% 准确):Map.VectorTileFactory.Factories[m].Visualizer.ObservedModifierStack .Modifiers[n].MyModifier
  • 道路建筑师GSDRoadSystem

Map 层次结构中的大多数对象都是ScriptableObject通过编辑器 UI 中的检查器添加/配置的。

在我的OnStackComplete事件处理程序中,我试图针对GSDRoadSystem. 我说“尝试”是因为我无法弄清楚如何连接所有要注入的东西,除了重写大部分 Mapbox 代码来简单地用 装饰所有[Inject]东西,鉴于 SDK 是我不愿意做的事情是仍在大力发展。

主要问题似乎MyModifier是没有MyDataObject注入,我猜是因为 Mapbox/Unity 正在控制生命周期(由于通过检查器/编辑器进行配置),但我不知道如何解决或使用它通过禅射。

我的另一个选择是弄乱 Unity 消息传递系统,并在消息中传递向量列表,通过 Unity 提供的服务定位器MyObjectCreator将其定位到适当的位置。GSDRoadSystem不理想,但鉴于这是一次性设置,RoadArchitect 处理将使任何额外的时间或内存相形见绌,即使它有点不雅,我也可以接受,尽管我宁愿学习如何让 Zenject 连接起来,如果这是可能的话(也许不是因为 Mapbox 是如何构建东西的)。

我确实有相当广泛的与 DI(Autofac、Ninject、poor-man's 等)合作的背景,但这是我第一次涉足 Unity3d。有可能我允许 Unity 将事物云化,并且解决方案很明显,但我现在没有看到它。

0 投票
0 回答
1611 浏览

c# - 如何修复异常:ZenjectException:在构建类型为“B”的对象时无法解析类型“A”。对象图:B

我试图在我的状态机上的某个特定时刻在运行时加载预制件。但是我在运行时遇到了这个异常。所有场景都使用 Ctrl Left+Maj Left+V 快捷键进行验证。

问题的背景

我的状态机绑定到项目上下文中:

状态是使用 AVFFactory 类中的函数 CreateState 创建的。创建状态并在需要时在它们之间导航没有问题。除非我尝试加载包含游戏对象上下文的预制件。所以,我知道状态机的所有管理只存在于项目上下文中。

我在场景上下文的安装程序中放置了我的预制工厂的绑定:

我的预制件包含一个带有安装程序的游戏对象上下文:

以及用于将对象与工厂一起使用的组件:

我需要工厂实例的状态就是这样,当我想创建这个对象时,我遇到了异常,因为它无法解析类型 AVFSandboxPedestal.Factory :

我已经尝试过的

我认为问题是:我将我的状态机和状态放入项目上下文中,并将我的预制件放入他自己的上下文中。所以,显然,它不能工作。(不?)

所以我尝试在我的预制件上添加一个 Zenject Binding 组件,我在其中添加了 AVFSandboxPedestal 并在其中添加了项目上下文。但它不起作用。

我尝试在类 AVFSandboxPedestal 之外创建一个工厂,并使用组件 Zenject Binding 将其绑定到项目上下文。(但是我在场景时在场景上下文中的安装程序中进行了绑定。也许它不会引发错误,但它是一个),将类 AVFSandboxPedestal 绑定到场景上下文。但似乎没有任何效果。我没有解决该问题的方法,一遍又一遍地阅读文档现在对我没有帮助。

注意:我不希望实际的预制件仅在实际场景中持续存在于所有场景中。但是状态机必须在所有场景中坚持。

注意:如果您需要更高的精度。问一下。;)

谢谢 !:)

0 投票
1 回答
627 浏览

unity3d - 未解决实例化游戏对象中的依赖关系

安装人员:

注入行为:

问题StateController是 null at UpdateObject

我应该以某种方式实例化游戏对象吗?

0 投票
0 回答
687 浏览

c# - 使用 Zenject 更改场景时的性能问题

我有两个场景:菜单和主。我有一个巨大的滞后SceneManager.LoadScene("Main")

这是来自分析器的数据: https ://gyazo.com/da116d1f8e9b429e9170bc3769d23ac4

据我了解与初始化 Zenject 上下文相关的 1 秒延迟。

这是我的安装程序:

该场景在运行时有大约 40 个游戏对象。

我正在使用 Unity 2017.2.1f1、.NET 4.6 和 Zenject 5.5.1。

有没有办法加快场景之间的切换?

0 投票
0 回答
378 浏览

c# - Zenject 将 monobehaviur 对象传递给工厂

我有一个 Monobehaviour 对象 BaseUnit,它可以有一些状态,所以我创建了状态工厂,就像在 Zenject 示例项目中一样,但我的问题是当我为这个 BaseUnit 创建这个状态工厂时如何传递这个 BaseUnit 的引用?

0 投票
1 回答
760 浏览

c# - Zenjection 绑定

我认为最好通过代码来制定问题。我有一个基类。

例如,还有一些派生类。

如您所见,我希望有几种具有适当 WalkSettings 的单元类型,这些单元类型将从 ScriptableObject 中设置。

所以问题是如何使用 Zenject 将适当的设置注入到适当的类中,任何帮助或澄清都会非常有帮助。

---UPD---

我第一次表达得很糟糕。我想要的是将 CanWalk.WalkSetting 绑定到适当的设置。所以我可以

但这是错误的,因为最后一个绑定只会覆盖每个班级的步行设置。所以我需要的是

现在我只是在 Aracher 里面做这个。

但也许 Zenject 中有一些东西可以解决这个问题。

0 投票
1 回答
1518 浏览

c# - 你能有 Zenject 的通用创建方法吗

所以我有一个基类和一些派生类,我只想拥有一个具有通用创建方法的工厂,它将创建适当的实例并注入所有依赖项。这可能使用 Zenject 吗?就像是。

现在我正在这样做,但正如你所见,这不是很干净的解决方案。

0 投票
1 回答
92 浏览

unity3d - FromNewComponentSibling 然后重用

我希望将相同的实例RouMainMenuPresenterCompanion注入 MainMenuPresenter 作为ICompanion( FromNewComponentSibling) 并在将来重用这个创建的实例,就像RouMainMenuPresenterCompanion任何解析器一样

上面的示例导致循环依赖。我该如何解决我的问题?

0 投票
0 回答
1379 浏览

unity3d - Unity 现在推出了自己的依赖注入框架。Inject 的未来在哪里?

Unity的Entity Component System数据驱动设计,引入了自己的DI框架,甚至包括[Inject]字段属性。

https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/Documentation/content/ecs_in_detail.md#injection

Zenject 将如何融入其新的编码范式?

0 投票
1 回答
431 浏览

unity3d - 从 SettingCollection 中选择 GameObject

我正在使用 Zenject 框架,我想为工厂创建的类实例化 gameObject。为此,我在 GameInstaller 中使用了类似的东西

它工作正常,但在我的 _settings.PlainHexPrefab 中,我收集了 GameObjects,我需要通过 Hex 对象的属性选择其中一个依赖项。我怎么能做到?