首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zenject: MonoBehaviour注入

Zenject: MonoBehaviour注入
EN

Stack Overflow用户
提问于 2022-01-10 19:15:09
回答 1查看 1.7K关注 0票数 2

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

代码语言:javascript
复制
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);
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 06:18:35

我认为你没有注射你的例子。从文献资料 "FromInstance -向容器中添加一个给定的实例。注意,在这种情况下,给定的实例不会被注入。如果您也希望在启动时注入您的实例,请参阅QueueForInject“(QueueForInject将在构造初始对象图后将给定实例排队进行注入)。基本上,您需要注入您的实例以使注入的方法执行。

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

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

注意,为了成功地执行注入,您必须先将容器中的依赖项与Container.Bind语句连接起来,以便容器知道需要注入什么以及如何注入。

我建议仔细阅读那些非常好的文档,并遵循下面的例子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70657796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档