2

我是 Zenject 的新手,这是我使用此资产的第一个项目。我有注射问题!也许有人知道我做错了什么或错误可能在哪里。在下面的代码中,_spawnArea 未初始化。

public class BootstrapIniter : MonoInstaller
{
    [SerializeField] private Camera _mainCamera;
    [Space(10)]
    [SerializeField] private Spawner _spawner;


    public override void InstallBindings()
    {
        BindMain();

        BindBallHandle();
    }
    
    
    private void BindMain()
    {
        Container.Bind<Camera>().FromInstance(_mainCamera).AsSingle();
    }

    private void BindBallHandle()
    {
        Container.Bind<Spawner>().FromInstance(_spawner).AsSingle();
    }
}



[RequireComponent(typeof(SpawnArea))]
public class Spawner : MonoBehaviour
{
    private SpawnArea _spawnArea;


    private void Awake()
    {
        _spawnArea = GetComponent<SpawnArea>();
    }

    [Inject]
    public void Construct(Camera camera)
    {
        Rect cameraRect = camera.pixelRect;
        _spawnArea.Init(cameraRect);
    }
}

预先感谢您寻找解决方案的答案或方向

4

1 回答 1

1

我认为您没有注入您的实例。来自文档“FromInstance - 将给定实例添加到容器中。请注意,在这种情况下不会注入给定实例。如果您还希望在启动时注入实例,请参阅 QueueForInject”(QueueForInject 会将给定实例排队等待构造初始对象图后注入)。基本上,您需要注入您的实例才能执行注入的方法。

另一方面,我没有看到从实例绑定单一行为的意义,因为您必须生成实例将其绑定到容器然后注入它。您有绑定方法可以一次完成所有这些操作,请查看“构造方法”部分。

检查示例: FromComponentInNewPrefabResource - 将给定的预制件(在给定的资源路径中找到)实例化为新的游戏对象,在其上注入任何 MonoBehaviour,然后以与 GetComponentInChildren 工作类似的方式搜索结果类型的结果(因为它将返回找到的第一个匹配值)。

请注意,要成功进行注入,您必须事先使用Container.Bind语句连接容器中的依赖项,以便容器知道需要注入什么以及如何注入。

我建议仔细阅读非常好的文档并按照示例进行操作。

于 2022-01-11T06:18:35.887 回答