先看一下绑定
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。