1

我有一个使用方法注入的 MonoBehaviour:

    [Inject]
    private void Init(IFirst first, ISecond second)
    {
        _first = first;
        _second = second;
        StartService();
        Debug.LogError("Should only appear once!");
    }

由于某种原因,此方法被 Zenject 调用了两次,我不明白为什么。更糟糕的是:如果我在类中添加一个 Update 方法,它不会做任何特别的事情(并且不会调用 Init!)突然 Init 会被调用 7 次!更新没有做任何花哨的事情:

    private void Update()
    {
        //return;  <-- if this is added, init gets called 2 times by zenject, otherwise 7 times
        if (someFlag)
        {
            SomeGlobalField = "something"
            someflag = false;
        }
        if (!SomeGlobalField.Equals(SomeOtherGlobalField))
        {
            SomeOtherGlobalField = SomeGlobalField;
            StartService();
        }
    }

两者之间的唯一联系是它们都调用 StartService,这又没有做任何特别的事情,只是在注入的字段之一上调用方法。

有人可以告诉我这里可能发生了什么吗?我正在使用 ProjectContext。我检查了其他一些看起来不错的课程。该类仅添加到场景中的一个游戏对象。

4

1 回答 1

2

我错过了 StartService 方法调用可能导致场景快速来回切换的事实(立即,所以我没有意识到它正在发生)。所以inject方法被调用了几次,因为我多次进入这个场景。也许这对其他人有帮助:)

于 2018-11-15T09:42:41.277 回答