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 简介
约定 还记得上版本的第二十四篇的约定嘛?现在出来履行啦~ 为什么要重制? 之前写的专栏都是按照心情写的,在最初的时候笔者什么都不懂,而且文章的发布是按照很随性的一个顺序.结果就是说,大家都看完了,都还 ...
随机推荐
- Python学习笔记5-字符串、bool、数值操作和数组字典排序
1.字符串 # 字符串数字之间转换 # x = int("6") # print type(x) #<type 'str'> # y = str(6) # print ...
- 六行代码获取本地IP
uses IdIPWatch; function GetNativeIP: String; var IdIPWatch: TIdIPWatch; begin IdIPWatch := TIdIPWat ...
- 楼天城楼教主的acm心路历程(作为励志用)
楼主个人博客:小杰博客 利用假期空暇之时,将这几年GCJ,ACM,TopCoder 參加的一些重要比赛作个 回顾.昨天是GCJ2006 的回顾,今天时间上更早一些吧,我如今还清晰记得3 年 前,我刚刚 ...
- where can I find source of com.android.internal.R.styleable.AlertDialog_multiChoiceItemLayout?
I want to modify Alert dialog multi select layout. For my program I want two line multi-select item. ...
- 泛泰A870S官方4.4.2系统S0218210 内核版本号信息
从EGL中获取的信息: OpenGL ES Shader Compiler Version: 17.01.12.SPL Build Date: 02/24/14 Mon Local Branch: R ...
- CAD创建不规则形状视口
选择CAD模型空间中多段线,在指定的布局中创建视口,方法如下: /// <summary> /// 创建视口 /// </summary> /// <param name ...
- C# webservice开发
一.Webservice简介Web Service也叫XML Web Service. Web Service是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量 ...
- bootstrap的导航改造
在使用bootstrap制作后台时用到了响应式导航条,其中dropdown组件更是用的比较多,用的多需要点击的就多,dropdown默认鼠标左键单击才展开,如果使用鼠标放上去(hover)就展开则会省 ...
- leetcode Search for a Range python
class Solution(object): def searchRange(self, nums, target): """ :type nums: List[int ...
- Linux学习之chkconfig命令
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...