04-Installer安装器

Installer安装器

Installer意为安装器,可以使一组绑定操作进行复用,主要分为以下三种:
(1)Installer:普通的Installer,需要手动进行安装操作
(2)MonoInstaller:可以挂载在GameObject上,当GameObject所在的SceneContext激活时,进行安装操作
(3)ScriptableObjectsInstaller:可序列化、可配置的Installer

Installer

让一个类实现Installer接口,重写InstallBindings方法,并在方法中执行绑定操作。之后就可以直接通过类名.Install直接向事先声明的容器中进行绑定。

public class InstallerExample : MonoBehaviour
{
    void Start()
    {
        var container = new DiContainer();
        SubSystemInstaller.Install(container);
        container.Resolve<HelloWorldService>().HelloWorld();
    }

    class SubSystemInstaller:Installer<SubSystemInstaller>
    {
        public override void InstallBindings()
        {
            Container.Bind<HelloWorldService>().AsSingle();
        }
    }
}

MonoInstaller

参考快速入门中的方式创建MonoInstaller,并安装到SceneContext中。然后在其他脚本中就可以通过注入的方式,获取到绑定的实例。

public class MonoInstallerExample : MonoInstaller
{
    public override void InstallBindings()
    {
        Container.Bind<HelloWorldService>().AsSingle();
    }
}
public class MonoInstallerCaller : MonoBehaviour
{
    [Inject] private HelloWorldService _service;
    void Start()
    {
        _service.HelloWorld();
    }
}

MonoInstaller可以挂载在预制体上,也可以动态创建。

ScriptableObjectsInstaller

一般作为配置使用,可以配置所有可序列化的对象,如预制体、贴图、数据等。它的用法如下:

(1)首先创建一个ScriptableObjectsInstaller

(2)创建配置类,并在Installer中绑定到容器,注意配置类必须是可序列化的

[CreateAssetMenu(fileName = "ScriptableObjectInstallerExample", menuName = "Installers/ScriptableObjectInstallerExample")]
public class ScriptableObjectInstallerExample : ScriptableObjectInstaller<ScriptableObjectInstallerExample>
{
    public PlayerSetting Setting;
    public override void InstallBindings()
    {
        Container.BindInstance(Setting);
    }
}
[Serializable]
public class PlayerSetting
{
    public int Speed = 10;
    public GameObject prefabA;
}

(3)接下来就可以在Installers中创建对应的配置文件

在这个配置文件中可以对配置项进行更改

(4)将这个配置文件装配到SceneContext中

(5)然后就可以在其他脚本中通过注入获取到对应的配置类实例了

public class ScriptableObjectInstallerCaller : MonoBehaviour
{
    [Inject] private PlayerSetting _playerSetting;
    void Start()
    {
        Debug.Log(_playerSetting.Speed);
        Debug.Log(_playerSetting.prefabA.name);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值