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 简介
约定 还记得上版本的第二十四篇的约定嘛?现在出来履行啦~ 为什么要重制? 之前写的专栏都是按照心情写的,在最初的时候笔者什么都不懂,而且文章的发布是按照很随性的一个顺序.结果就是说,大家都看完了,都还 ...
随机推荐
- 用事件与CSS改变按钮不同状态下的颜色
目标效果: 表单的群发按钮,在鼠标悬停时为深蓝色,鼠标离开时为淡蓝色. HTML代码: <button id="submitBtn" class="btn&quo ...
- 让ie支持placeholder属性,一段js搞定
placeholder属性真的是超级好用的新属性,可惜,只有新版浏览器才支持,为了写出输入框贴心提示,老方法就是加span标签覆盖,营造出placeholder提示的感觉,现在安利一款好用的js,好用 ...
- JS原型,Prototype,原型
对于javascript这样一种前端语言,个人觉得,要真正的理解其oop, 就必须要彻底搞清楚javascript的对象,原型链,作用域,闭包,以及this所引用的对象等概念.这些对弄明白了,应该就可 ...
- iOS7、iOS8推送通知的区别
iOS8版本以后的推送通知代码[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificati ...
- DOM缘起
DOM是现在按W3C标准的浏览器均实现的标准.HTML.CSS.DOM共同在结构.表现.交互上共同支撑起一个页面.当然,必须以用户为中心.平稳退化.逐渐增强.DOM的操作是通过JS来实现的.JS最初在 ...
- malloc和free的区别
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存. 2,对于非内部数据类型的对象而言,光用maloc/free无法满足动 ...
- Java Eclipse常规设置
改变字体大小 eclipse英文版中如何去修改字体及方法?首先打开eclipse中,按下面的方法即可菜单项:window ->preferences -> general -> ap ...
- objective -c こだわり
You make an object by creating an instance of a particular class. You do this by allocating the obje ...
- SQLSERVER 使用WITH函数查找时间点最大数据行
--表结构及数据: DTIME TYPE MONEY 2015-10-14 13:50:35.000 shopping 20 2015-10-21 13:51:24.000 shopping 40 ...
- Cloning Java objects using serialization
Sometimes you need to clone objects, and sometimes you can't use their clone method, and sometimes s ...