Zenject:MonoBehaviour 注入
Zenject: MonoBehaviour injection
我是 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);
}
}
提前感谢您的回答或寻找解决方案的方向
我认为你没有注入你的实例。
来自 documentaiton "FromInstance - 将给定实例添加到容器中。请注意,在这种情况下,给定实例 将不会被注入 。如果您还希望注入实例在启动时,请参阅 QueueForInject”(一旦构建了初始对象图,QueueForInject 就会将给定实例排队以进行注入)。基本上你需要注入你的实例来执行注入的方法。
另一方面,我看不到从实例绑定单一行为的意义,因为您必须生成实例,将其绑定到容器,然后将其注入。你有绑定方法可以为你一次完成所有这些,请查看“构造方法”部分。
检查示例:FromComponentInNewPrefabResource - 将给定的预制件(在给定的资源路径中找到)实例化为新的游戏对象,在其上注入任何 MonoBehaviour 的,然后搜索结果对于类型 ResultType,其工作方式与 GetComponentInChildren 类似(因为它将 return 找到的第一个匹配值)。
请注意,要成功进行注入,您必须事先使用 Container.Bind
语句连接容器中的依赖项,以便容器知道需要注入什么以及如何注入。
我建议仔细阅读非常好的文档并按照示例进行操作。
我是 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);
}
}
提前感谢您的回答或寻找解决方案的方向
我认为你没有注入你的实例。 来自 documentaiton "FromInstance - 将给定实例添加到容器中。请注意,在这种情况下,给定实例 将不会被注入 。如果您还希望注入实例在启动时,请参阅 QueueForInject”(一旦构建了初始对象图,QueueForInject 就会将给定实例排队以进行注入)。基本上你需要注入你的实例来执行注入的方法。
另一方面,我看不到从实例绑定单一行为的意义,因为您必须生成实例,将其绑定到容器,然后将其注入。你有绑定方法可以为你一次完成所有这些,请查看“构造方法”部分。
检查示例:FromComponentInNewPrefabResource - 将给定的预制件(在给定的资源路径中找到)实例化为新的游戏对象,在其上注入任何 MonoBehaviour 的,然后搜索结果对于类型 ResultType,其工作方式与 GetComponentInChildren 类似(因为它将 return 找到的第一个匹配值)。
请注意,要成功进行注入,您必须事先使用 Container.Bind
语句连接容器中的依赖项,以便容器知道需要注入什么以及如何注入。
我建议仔细阅读非常好的文档并按照示例进行操作。