Unity中的脚本都默认继承MonoBehaviour类,该类提供了游戏循环中的各类回调函数。但在有些情况下我们不需要MonoBehaviour中提供的如此多的方法,此时如果仍然继承MonoBehaviour就会造成资源的浪费。Zenject提供了如下几个接口,让普通类也可以使用类似于MonoBehaviour中的回调函数。
IInitializable
等同于Unity中的Start方法,一般用于给对象进行一些初始化操作。
只需要让类实现IInitializable接口,然后实现接口提供的Initialize()方法,最后绑定到容器即可。
class ZenjectInterfaceTestClass : IInitializable
{
public void Initialize()
{
Debug.Log("Initialize");
}
}
public class SceneContextExample : MonoInstaller
{
public override void InstallBindings()
{
Container.BindInterfacesAndSelfTo<ZenjectInterfaceTestClass>().AsSingle();
}
}
ITickable、IFixedTickable、ILateTickable
ITickable、IFixedTickable、ILateTickable接口分别对应Unity中的Update、FixedUpdate、LateUpdate方法。
它们的用法如下:
class ZenjectInterfaceTestClass : IFixedTickable, ILateTickable,ITickable
{
public void FixedTick()
{
Debug.Log("FixedTick");
}
public void LateTick()
{
Debug.Log("LateTick");
}
public void Tick()
{
Debug.Log("Tick");
}
}
public class SceneContextExample : MonoInstaller
{
public override void InstallBindings()
{
Container.BindInterfacesAndSelfTo<ZenjectInterfaceTestClass>().AsSingle();
}
}
IDisposable
IDisposable并不是由Zenject提供的,而是在C#的System命名空间下。但它同样可以像上面几个接口那样使用。
IDisposable接口提供的方法主要是在关闭程序或上下文资源被销毁时执行。
class ZenjectInterfaceTestClass : IDisposable
{
public void Dispose()
{
Debug.Log("Dispose");
}
}
public class SceneContextExample : MonoInstaller
{
public override void InstallBindings()
{
Container.BindInterfacesAndSelfTo<ZenjectInterfaceTestClass>().AsSingle();
}
}