Zenject中多次调用方法绑定

时间:2018-11-15 09:26:14

标签: c# unity3d dependency-injection zenject

我有一个使用方法注入的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。我检查了其他一些看起来不错的课程。该类仅添加到场景中的一个游戏对象。

1 个答案:

答案 0 :(得分:2)

我错过了一个事实,即StartService方法调用可能会导致场景快速来回切换(立即,因此我不知道它发生了)。因此,多次调用了inject方法,因为我多次进入了该场景。 也许这对其他人有帮助:)