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