StrangeIoC框架学习
1.需引入程序集
using strange.extensions.command.impl;
2.需要一个MVCS框架的入口
①定义脚本GameContext:MVCSContext
②重构构造函数,可F12进入类中查找
如:public GameContext(MonoBehaviour view, bool autoMapping) : base(view, autoMapping){}
③重写mapBindings()方法,此方法专门用来实现绑定映射(绑定脚本/事件)
如,下面三种绑定方法:
(1)使类实现单例类
//绑定IntergrationModel,使其实现单例类
injectionBinder.Bind<IntergrationModel>().To<IntergrationModel>().ToSingleton();
(2)将View和Mediator绑定
//将SelectView和SelectMediator绑定在一起
mediationBinder.BindView<SelectView>().ToMediator<SelectMediator>();
(3)将事件类型和事件类绑定
//将CommandEvent.ChangeMultiple事件和ChangeMultipleCommand脚本绑定在一起
commandBinder.Bind(CommandEvent.ChangeMultiple).To<ChangeMultipleCommand>();
3.有了启动框架的入口,然后就需要开启这个框架
如在游戏整体初始化的脚本中开始框架:
①定义一个游戏初始化脚本GameRoot,使其继承ViewContext
②在其Awake()方法中开启:
//开始MVC框架
context = new GameContext(this, true);
context.Start();
③上述逻辑运行后,MVCS框架就开始成功(即GameContext)并调用GameContext.mapBindings(),完成绑定的一系列操作
4.一个UI视图对象对应一个View脚本,而一个View脚本对应一个Mediator脚本。
其中View脚本需继承EventView; Mediator脚本需继承EventMediator
*View脚本只处理自身视图中的视图/按钮等功能(需提供与外部处理的方法供Mediator脚本调用)
*Mediator脚本则处理View视图对外调用的功能方法:
如:①定义选择视图的Mediator脚本,使其继承ViewContext
②利用反射[Inject]反射获得绑定了的对象(通过属性来定义)
[Inject]
public SelectView SelectView { get; set; }
③获得SelectView 后,则可以在需要时调用SelectView里的方法来处理
5.通过Dispatcher来完成不同枚举类型事件与对应的事件脚本的监听调用
(需事先设定不同的事件枚举类型)
①两个已绑定的对象(如View和Mediator)相互的监听调用
比如:
A.在枚举类中设定ViewEvent.CHANGE_MULTIPLE枚举类型
B.在SelectView中
//利用dispatcher来注册ViewEvent.CHANGE_MULTIPLE的点击事件,并向监听方传递参数1
dispatcher.Dispatch(ViewEvent.CHANGE_MULTIPLE, 1);
C.在SelectMediator中
(1) 写定一个OnViewClick(IEvent evt)方法供监听成功后调用,其中IEvent evt为传递的参数,可以通过evt.data开获取,需要强转类型
(2) //利用SelectView.dispatcher来监听ViewEvent.CHANGE_MULTIPLE事件,
//当监听事件被触发时调用OnViewClick方法
SelectView.dispatcher.AddListener(ViewEvent.CHANGE_MULTIPLE, OnViewClick);
D.上述ABC三步,实现了事件的相互监听触发
②两个已绑定的对象(如Command事件类型和Command类)相互的监听调用
(Command类需继承EventCommand)
比如:
A.在枚举类中设定CommandEvent.ChangeMultiple枚举类型
B.在需要调用Command类的地方使用Dispatcher.Dispath()来发送事件实现
//发送事件,并传递参数multiple倍数
dispatcher.Dispatch(CommandEvent.ChangeMultiple, multiple);
C.在已绑定的对象Command类中则可以通过Execute()来处理上述事件调用,其中通过evt.data来获取传递的参数,需要强转类型
1.需引入程序集
using strange.extensions.command.impl;
2.需要一个MVCS框架的入口
①定义脚本GameContext:MVCSContext
②重构构造函数,可F12进入类中查找
如:public GameContext(MonoBehaviour view, bool autoMapping) : base(view, autoMapping){}
③重写mapBindings()方法,此方法专门用来实现绑定映射(绑定脚本/事件)
如,下面三种绑定方法:
(1)使类实现单例类
//绑定IntergrationModel,使其实现单例类
injectionBinder.Bind<IntergrationModel>().To<IntergrationModel>().ToSingleton();
(2)将View和Mediator绑定
//将SelectView和SelectMediator绑定在一起
mediationBinder.BindView<SelectView>().ToMediator<SelectMediator>();
(3)将事件类型和事件类绑定
//将CommandEvent.ChangeMultiple事件和ChangeMultipleCommand脚本绑定在一起
commandBinder.Bind(CommandEvent.ChangeMultiple).To<ChangeMultipleCommand>();
3.有了启动框架的入口,然后就需要开启这个框架
如在游戏整体初始化的脚本中开始框架:
①定义一个游戏初始化脚本GameRoot,使其继承ViewContext
②在其Awake()方法中开启:
//开始MVC框架
context = new GameContext(this, true);
context.Start();
③上述逻辑运行后,MVCS框架就开始成功(即GameContext)并调用GameContext.mapBindings(),完成绑定的一系列操作
4.一个UI视图对象对应一个View脚本,而一个View脚本对应一个Mediator脚本。
其中View脚本需继承EventView; Mediator脚本需继承EventMediator
*View脚本只处理自身视图中的视图/按钮等功能(需提供与外部处理的方法供Mediator脚本调用)
*Mediator脚本则处理View视图对外调用的功能方法:
如:①定义选择视图的Mediator脚本,使其继承ViewContext
②利用反射[Inject]反射获得绑定了的对象(通过属性来定义)
[Inject]
public SelectView SelectView { get; set; }
③获得SelectView 后,则可以在需要时调用SelectView里的方法来处理
5.通过Dispatcher来完成不同枚举类型事件与对应的事件脚本的监听调用
(需事先设定不同的事件枚举类型)
①两个已绑定的对象(如View和Mediator)相互的监听调用
比如:
A.在枚举类中设定ViewEvent.CHANGE_MULTIPLE枚举类型
B.在SelectView中
//利用dispatcher来注册ViewEvent.CHANGE_MULTIPLE的点击事件,并向监听方传递参数1
dispatcher.Dispatch(ViewEvent.CHANGE_MULTIPLE, 1);
C.在SelectMediator中
(1) 写定一个OnViewClick(IEvent evt)方法供监听成功后调用,其中IEvent evt为传递的参数,可以通过evt.data开获取,需要强转类型
(2) //利用SelectView.dispatcher来监听ViewEvent.CHANGE_MULTIPLE事件,
//当监听事件被触发时调用OnViewClick方法
SelectView.dispatcher.AddListener(ViewEvent.CHANGE_MULTIPLE, OnViewClick);
D.上述ABC三步,实现了事件的相互监听触发
②两个已绑定的对象(如Command事件类型和Command类)相互的监听调用
(Command类需继承EventCommand)
比如:
A.在枚举类中设定CommandEvent.ChangeMultiple枚举类型
B.在需要调用Command类的地方使用Dispatcher.Dispath()来发送事件实现
//发送事件,并传递参数multiple倍数
dispatcher.Dispatch(CommandEvent.ChangeMultiple, multiple);
C.在已绑定的对象Command类中则可以通过Execute()来处理上述事件调用,其中通过evt.data来获取传递的参数,需要强转类型