创建一个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");//调用响应方法
}
}