使用Signal信号进行交互

先看一下绑定

protected override void mapBindings()
{
    injectionBinder.Bind<CameraInitSignal>().ToSingleton();//不声明为单例好像就不行
    mediationBinder.Bind<CamerView>().To<CamerViewMediator>();
    commandBinder.Bind<CameraInitSignal>().To<CameraInitCommand>();
}

View接收到用户的命令交互,发送命令给Mediator

using strange.extensions.mediation.impl;
using strange.extensions.signal.impl;

public class CamerView : View {

    //实例化一个局部的Signal,相当于局部的dispatcher
    public Signal<int> ViewInitSignal = new Signal<int>();

    private void OnMouseDown()
    {
        //发送命令
        ViewInitSignal.Dispatch(10);
    }
}

Mediator层

using UnityEngine;
using strange.extensions.mediation.impl;

public class CamerViewMediator : Mediator {

    [Inject]
    public CamerView View { get; set; }

    [Inject]//通过注入的方式获取全局的Signal
    public CameraInitSignal signal { get; set; }

    public override void OnRegister()
    {
        //为View局部的Signal监听
        View.ViewInitSignal.AddListener(OnCameraInit);
    }

    private void OnCameraInit(int num)
    {
        Debug.Log(10);
        //发送全局的Signal,调动绑定好的Command
        signal.Dispatch(num);
    }
}

Command层

using UnityEngine;
using strange.extensions.command.impl;

public class CameraInitCommand : Command {

    [Inject]//注入的方式获取传递的参数
    public int Num { get; set; }

    public override void Execute()
    {
        Debug.Log("Hello World Signal" + Num);
    }
}

剩下回调什么的就没必要继续了,主要想说说的是一个局部的Signal,和一个全局的Signal,还有前面Event没有提到的全局事件的传参,都是通过注入的方式,对应上类型就行,StrangIoc会自动识别的,不需要手动去Bind。


首页 我的博客
粤ICP备17103704号