Zenject 游戏对象注入

Mas*_*ian 5 c# dependency-injection inversion-of-control unity-game-engine zenject

我正在使用Zenject框架,并且我正在GameObject为一个类使用多个,但我不知道使用 Zenject Container 来做到这一点。这是我的代码:

private GameObject _canvas;
private GameObject _mainWindow;
private GameObject _createAccountWindow;

void Awake()
{
    _mainWindow = GameObject.FindGameObjectWithTag("MainWindow");
    _canvas = GameObject.FindGameObjectWithTag("Canvas");
    _createAccountWindow = GameObjectExtensions.FindObject(_canvas, "CreateAccountWindow");
}
Run Code Online (Sandbox Code Playgroud)

是否可以从 Zenject Container 注入这些对象?如果是,我该怎么做?

Ste*_*len 4

使用 Zenject,这些类将像这样注入:

[Inject]
GameObject _canvas;

[Inject]
GameObject _mainWindow;

[Inject]
GameObject _createAccountWindow;
Run Code Online (Sandbox Code Playgroud)

但是,当您使用 DI 时,它通常根据类型进行注入,因此将它们全部设为“GameObject”类型将使这变得困难。

但如果你把它做成这样:

[Inject]
Canvas _canvas;

[Inject(Id = "MainWindow")]
RectTransform _mainWindow;

[Inject(Id = "CreateAccountWindow")]
RectTransform _createAccountWindow;
Run Code Online (Sandbox Code Playgroud)

然后还将 ZenjectBinding 组件添加到每个组件中,并为 ZenjectBinding 的 Identifier 属性添加一个值,然后它应该可以工作。(我假设他们在启动时就已经在场景中了)

  • 有没有办法通过构造函数或方法注入而不是属性注入来注入带有 id 的游戏对象? (2认同)