Unity StrangeIoc框架 (三)signal信号方式
先创建TestRoot
using UnityEngine;
using System.Collections;
using strange.extensions.context.impl; public class TestRoot : ContextView { void Start()
{
context = new TestContext(this);
}
}
创建TestContext 在TestContext中我们需要把事件命令修改为 信号命令
using UnityEngine;
using System.Collections;
using strange.extensions.context.impl;
using strange.extensions.context.api;
using strange.extensions.command.api;
using strange.extensions.command.impl; public class TestContext : MVCSContext { public TestContext(MonoBehaviour view)
: base(view)
{ } public TestContext(MonoBehaviour view, ContextStartupFlags flags)
: base(view, flags)
{ }
override public IContext Start()
{
base.Start();
StartSignal startSignal = (StartSignal)injectionBinder.GetInstance<StartSignal>();
startSignal.Dispatch();
return this;
}
protected override void addCoreComponents()
{
base.addCoreComponents();
injectionBinder.Unbind<ICommandBinder>();
injectionBinder.Bind<ICommandBinder>().To<SignalCommandBinder>().ToSingleton();
} protected override void mapBindings()
{
injectionBinder.Bind<SuccessSignal>().ToSingleton();
injectionBinder.Bind<IService>().To<TestService>(); mediationBinder.Bind<TestView>().To<TestMediator>(); commandBinder.Bind<RequestSignal>().To<RequestCommand>();
commandBinder.Bind<StartSignal>().To<StartCommand>().Once();
}
}
strange中IcommandBinder 事件绑定是在addCoreComponents中进行的 所以我们重写他 调用它原本的方法 再将ICommandBinder移除,在将他绑定到信号上signalCommandBinder 重写Start() 然后派发 这样就完成了 最后在mapBinding中进行之前一样的绑定 。
我们写一个脚本 把所有的信号都放在里面。 在具体情况中可以分模块将信号放在一起
public class StartSignal : Signal
{
}
public class ClickSignal : Signal
{
}
public class RequestSignal : Signal<string>
{
}
public class SuccessSignal : Signal
{
}
StartCommand与之前的事件方法没有区别
public class StartCommand : Command
{
[Inject(ContextKeys.CONTEXT_VIEW)]
public GameObject contextView { get; set; }
public override void Execute()
{
GameObject test = new GameObject("test");
test.AddComponent<TestView>();
test.transform.SetParent(contextView.transform);
}
}
TestView 有略微的不同 直接实例信号进行派发
public class TestView : View
{
public ClickSignal signal_Click = new ClickSignal();
void OnGUI()
{
if (GUI.Button(new Rect(, , , ), "click"))
{
signal_Click.Dispatch();
}
}
}
在TestMediator中进行监听 然后执行方法
public class TestMediator : Mediator
{
[Inject]
public TestView view { get; set; } [Inject]
public RequestSignal signal_Request { get; set; } public override void OnRegister()
{
view.signal_Click.AddListener(OnClick);
}
public void OnClick()
{
signal_Request.Dispatch("www.baidu.com");
}
}
当被点击后会进行signal_Request信号的事件派发 RequestSignal 通过注入获取
在RequestCommand中 我们service 通过注入获取 然后对他进行了signal_succesd信号的监听
public class RequestCommand : Command
{
[Inject]
public IService service { get; set; }
public override void Execute()
{
Retain();
service.signal_succesd.AddListener(OnComplete);
service.Request();
}
void OnComplete()
{
service.signal_succesd.RemoveListener(OnComplete);
Debug.Log("get data finish"); Release();
} }
既然添加了监听 那么肯定有地方会进行成功后的信号派发 在TestService 中 我们对成功的信号进行派发
public class TestService : IService
{
[Inject(ContextKeys.CONTEXT_VIEW)]
public GameObject contextView { get; set; }
[Inject]
public SuccessSignal signal_succesd { get; set; } public void Request()
{
contextView.GetComponent<MonoBehaviour>().StartCoroutine(Wait());
}
/// <summary>
/// 模拟网络请求延迟1秒
/// </summary>
/// <returns></returns>
IEnumerator Wait()
{
yield return new WaitForSeconds();
signal_succesd.Dispatch();
}
}
这样 我们就实现了信号的机制 信号也是官方推荐的方法
Unity StrangeIoc框架 (三)signal信号方式的更多相关文章
- Unity StrangeIoC框架
Unity StrangeIoC框架 http://blog.csdn.net/y1196645376/article/details/52746251
- Unity StrangeIoc框架 (一)
最近想项目中需要使用这个架构 因此 上网看了很多资料摸索 但是对于初学者来说大多数的资料不是那么容易理解 而且文档也是英文的阅读起来有点吃力 所以记录一下自己阅读的过程 方便以后翻阅和跟我一 ...
- Unity StrangeIoc框架 (二)
MVCSContex :the big picture 1.应用程序的入口是一个类成为ContextView,这是一个Monobehavior实例化MVCSContext 2.用MVCSContext ...
- unity StrangeIoc
已经很久没有写博客,主要原因还是自我荒废了太久,在学习上失去了动力.最近来新的公司实习,以前都是做项目的开发,现在被调到框架组,主要从事的是框架维护还有开发.学习了许多新的知识还有优秀的框架,今天就写 ...
- SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序
SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 异常汇总:http://www ...
- 2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller ...
- Django框架(十)--ORM多对多关联关系三种创建方式、form组件
多对多的三种创建方式 1.全自动(就是平常我们创建表多对多关系的方式) class Book(models.Model): title = models.CharField(max_length=32 ...
- pureMVC与strangeIoc框架对比
前言 最近有机会了解到了StrangeIoc框架,就拿来跟自己比较熟悉的pureMVC进行一下简要的对比.这两套开源框架都是基于MVC模式的扩展,pureMVC是一个跨平台跨语言的MVC轻量级应用框架 ...
- Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介
约定 还记得上版本的第二十四篇的约定嘛?现在出来履行啦~ 为什么要重制? 之前写的专栏都是按照心情写的,在最初的时候笔者什么都不懂,而且文章的发布是按照很随性的一个顺序.结果就是说,大家都看完了,都还 ...
随机推荐
- javascript的模块开发方法;
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ros消息时间同步与回调
转载自http://blog.csdn.net/zyh821351004/article/details/47758433 方式一: 全局变量形式 : TimeSynchronizer 步骤: 1. ...
- C#根据汉字生成拼音首字母全称
static void Main(string[] args) { string s = GetChineseSpell("周杰伦"); Console.WriteLine(s.T ...
- MySQL:Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.解决办法
今天在navicat上操作mysql数据库表,突然没有响应了.随后重启,mysql服务也终止了.随后启动服务,检查表,发现一张表卡没了,就重新添加一张表.报了一个错: Error : Tablespa ...
- Windows Server 2008防火墙问题及Sql Server2005用户登录问题
一.Windows Server 2008防火墙问题 1. 问题: 1.在 Windows 安全中心中单击“立即打开”以打开 Windows 防火墙时,会收到以下错误消息:安全中心无法打开 Wind ...
- php 输出带变量字符串
(一) <?php $a=50;echo "Hello World 我有"."$a"."元";?> 看此例子,变量a的输出,在p ...
- OC中NSArray的使用
不可变数组类容器类,管理一组对象类型的数据. 元素是有序的,索引值从0开始 数组中存储的元素必须是对象,类型任意. 创建数组对象,使⽤用实例初始化或便利构造器.获取元素个数.根据索引值获取对 ...
- Follow your heart
世界上最可怕的两个词,一个是执着,一个是认真.认真的人改变自己,执着的人改变命运.任何时候都别怕重来,每个看似低的起点,都是通往高峰的必经之路.不用抱怨那些不尽如人意,问问自己,你够努力了吗?转自人民 ...
- JS中String添加trim()方法
这么牛的JS竟然还要自己封装trim方法. 下面利用prototype和正则表达式的添加方式添加trim(): <script language="javascript"&g ...
- Microsoft Office 2010 Pro VOL简体中文正式版
网友们期待的Microsoft Office Professional Plus 2010 VOL简体中文正式版.所谓的“VOL”,即是Volume Licensing for Organizatio ...