Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(196评价)
价格: 4019.00元

在接口IScoreService中添加

IEventDispatcher dispatcher{get;set;}

回到继承这个接口的ScoreService中实现,同样是用inject自动注入

回调通常使用event,所以我们再创建一个ServiceEvent枚举

public enum ServiceEvent{
   RequestScore();
}

在RequstScoreCommand的Execute中添加监听器,用来响应返回的数据

Retain();
scoreService.dispatcher.AddListener(ServiceEvent.RequestScore,OnComplete);

 命令只执行一次,执行完毕之后就会自动销毁,我们需要维持这个命令存在的话就需要用到retain函数

在执行完oncomplete,也就是回调完成之后使用release函数进行释放

 

[展开全文]
风旅人 · 2019-12-31 · 0

创建一个RequestScoreCommand类,用于使view层和service层进行数据交互

public class RequestScoreCommand:Command{
  [Inject]
  public IScoreService scoreService{get;set;}
  public override void Execute(){//数据传输逻辑方法
   
 }
}

使用inject注入时,这个接口是与哪个实现类绑定的,则会注入相应的实现类

 

我们需要在mediator里触发这个command,所以mediator需要引用,这里依旧使用inject自动注入减少层之间的耦合性

在Context中做的绑定都是全局的,是通过event去调用方法,方法需要是全局的,所以我们这里要用到全局派发器

[Inject(ContextKeys.CONTEXT_DISPATCHER)]//全局的dispatch
public IEventDispatcher dispatcher{get;set;}// IEventDispatcher是接口类型

同样需要设置get、set方法系统内置的command都有绑定event,而我们自己定制command则需要手动写event并绑定

dispatcher.Dispatch(CommandEvent.RequestScore);

Dispatch()可以发起一个event,与之绑定的command会被调用

 

在command文件夹中创建CommandEvent类,用来保存所有命令的事件,这个event是枚举类型,不需要继承自任何类

public enum CommandEvent{
   RequestScoreCommand();//返回数据命令
}

 

需要在Context中绑定

commandBinder.Bind(CommandEvent.RequestScore).To<RequestScoreCommand>();

 

service接口与其实现类也需要绑定

injectionBinder.Bind<IScoreService>().To<ScoreService>().ToSingleton();//表示这个对象只会在工程中生成一次

由于是属于inject注入,所以需要使用injectionbinder,并且service和model在工程中只有一个,所以我们需要用ToSingleton将其作为单例

添加

public class RequestScoreCommand:Command{
  [Inject]
  public IScoreService scoreService{get;set;}
  public override void Execute(){
   scoreService.RequestScore("xxxx.xxx.xxx");//调用响应方法
 }
}

 

[展开全文]
风旅人 · 2019-12-25 · 0

cubeview需要与model层交互还需要通过一个脚本控制

创建一个cubemediator

在mediator里对view初始化

mediator里需要对OnRegister与OnRemove重写

在context中对mediator进行绑定

mediationBinder.Bind<CubeView>().To<CubeMediator>();

<>内的是类,()中的是枚举

绑定之后当游戏开始框架会自动将mediator挂载到view所在的游戏物体上

mediator中需要获取到cubeView

[Inject]
public CubeView cubeView{get;set}

[Inject]可以自动帮助开发者注入,减少组件之间的交互

当绑定完成的时候,就会调用mediator里的onregister,当游戏物体被移除时调用onremove,前提是mediator的view是在运行的

把cubeView的初始化放在onregister里

public override void OnRegister(){
   cubeView.Init();
}

view只与mediator交互,与之绑定的mediator负责与外界交互

一般情况下,游戏逻辑都是在view层完成,只有当需要储存或读取数据时,才会通过controller层与service和model层交互

[展开全文]
风旅人 · 2019-12-24 · 1

是什么层的就以什么层作为文件名结尾

例如:CubeView

视图层需要继承自view类

不要直接覆盖view类的start和awake方法

我们可以创建一个init()方法来跨过start方法初始化物体

始终记住数据应该存放在model层

[展开全文]
风旅人 · 2019-12-24 · 0

在To<StartCommand>()后追加.Once()表示这个绑定只使用一次,使用之后就解绑

按照MVCS的模式我们还需要创建model、这里创建一个ScoreModel用于存储数据,不需要继承自任何类,并且给数据设置get set方法

跟外界交互需要用到service,创建service需要两步,一步创建接口,第二步是创建实现接口的类,这样以后如果有新的交互需要添加只需要更改接口即可

创建一个service的接口IScoreService,不需要继承自任何类

接口里有接收分数的方法 void RequestScore();//用于向地址请求分数

int OnReceiveScore();//用于储存返回的分数

void UpdateScore();//用于更新分数,更新到服务器端

创建一个实现接口方法的类ScoreService,由于需要实现接口,则需要继承自IScoreService

[展开全文]
风旅人 · 2019-12-24 · 0

创建一个StartCommand类继承自Command

 

在Demo1Context中的mapB方法里对StartCommand方法进行绑定

CommandBinder.Bind(ContextEvent.START).To<StartCommand>();

这个方法需要写在model、serivce、command、mediator绑定之后,因为需要先绑定后才能启动

在startcommand中需要重写Execute()方法

public override void Execute(){}

在starcommand被调用的时候会默认调用这个重写方法

[展开全文]
风旅人 · 2019-12-22 · 0
protected override void mapBindings(){}

新建一个脚本名为Demo1ContextView,用于启动contextView,该脚本继承ContextView,继承后使用系统补全命名空间,并且将该脚本挂载到场景的空游戏物体上

新建另一个脚本Demo1Context作为contextView,该脚本继承自MVCSContext,同上

在Demo1ContextView中的awake方法里创建

this.context=new Demo1Context(this);//该方法需要传入一个monobhvs,而ContextView则继承自monobhvs,所以直接用this

该方法创建时会自动启动MVCS框架

 

在Demo1Context中实例化框架,这是其中一种实例化方法

public Demo1Context(MonoBehaviour view):base(view){}

实例化框架后需要进行绑定,覆写父类的绑定方法

protected override void mapBindings(){}

 

[展开全文]
风旅人 · 2019-11-13 · 0

绑定四个脚本,方便数据交互

[展开全文]
神武动乾坤 · 2019-08-28 · 0

transformfgvb

[展开全文]
sksk · 2019-06-15 · 0

dispatcher.AddListener();方法要在dispatcher.Dispatch()方法前调用,要不然就无法注册监听

[展开全文]
暖风如熏 · 2019-05-22 · 1

service-command-mediator-view

[展开全文]
Mr.Carl · 2017-08-11 · 0

### StrangeIoC介绍(MVCS)

- 在github上或者AssetsStore上引入

DI依赖注入

MVC设计模式

 

[展开全文]
如花爸爸 · 2017-06-14 · 0

[MenuItem("test/test1")]

[展开全文]
lix0824 · 2017-05-08 · 0

Context 环境 进行绑定。

dispatcher 派发器

[展开全文]
chenxiangren · 2016-10-01 · 0

重复的代码做成工具。

[展开全文]
chenxiangren · 2016-10-01 · 0