我是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);
}
}预先感谢您给出的答案或方向来寻找解决方案
发布于 2022-01-11 06:18:35
我认为你没有注射你的例子。从文献资料 "FromInstance -向容器中添加一个给定的实例。注意,在这种情况下,给定的实例不会被注入。如果您也希望在启动时注入您的实例,请参阅QueueForInject“(QueueForInject将在构造初始对象图后将给定实例排队进行注入)。基本上,您需要注入您的实例以使注入的方法执行。
另一方面,我看不出从实例绑定单个行为的意义,因为您必须生成实例,将其绑定到容器,然后注入它。您有为您一次完成所有这些工作的绑定方法,请查看“构造方法”一节。
例如: FromComponentInNewPrefabResource -实例化给定的预置文件(在给定的资源路径上找到)作为一个新的游戏对象,在其上注入任何MonoBehaviour的,然后以GetComponentInChildren工作的类似方式搜索ResultType类型的结果(因为它将返回找到的第一个匹配值)。
注意,为了成功地执行注入,您必须先将容器中的依赖项与Container.Bind语句连接起来,以便容器知道需要注入什么以及如何注入。
我建议仔细阅读那些非常好的文档,并遵循下面的例子。
https://stackoverflow.com/questions/70657796
复制相似问题