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(0, 0, 100, 40), "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(1); signal_succesd.Dispatch(); } }
這樣 我們就實現了訊號的機制 訊號也是官方推薦的方法
相關推薦
Unity StrangeIoc框架 (三)signal訊號方式
先建立TestRoot using UnityEngine; using System.Collections; using strange.extensions.context.impl; public class TestRoot : ContextView { void Start()
Unity StrangeIoc框架 (一)
最近想專案中需要使用這個架構 因此 上網看了很多資料摸索 但是對於初學者來說大多數的資料不是那麼容易理解 而且文件也是英文的閱讀起來有點吃力 所以記錄一下自己閱讀的過程 方便以後翻閱和跟我一樣的新人學習其中也借鑑了一些前輩的資料 如有反感請聯絡我 立馬進行修改 謝謝 StrangeIoc
Unity StrangeIoc框架 (二)
MVCSContex :the big picture 1.應用程式的入口是一個類成為ContextView,這是一個Monobehavior例項化MVCSContext 2.用MVCSContext來執行各種繫結。 3.派發器是一個通訊匯流排,允許你再程式傳送訊息,在mvcscontext中他們傳送的是T
爬蟲Scrapy框架之學習使用(三):訊號(Signals)
""" Extension for collecting core stats like items scraped and start/finish times """ import datetime
Unity學習(三)Unity Shader入門(基礎知識篇)+線性代數複習(未完待續)
至於為什麼剛建立了指令碼,現在就要做Shader了。。說多了都是淚 1.建立一個新的材質 Material Assert -> Create -> Material 拖到Scene中的某個物體上 2.建立一個新的Shader Assert -> Create -
Java&Xml教程(三)使用DOM方式修改XML檔案內容
DOM解析方式也可用於修改XML資料,我們可以使用它完成新增元素、刪除元素、修改元素值、修改元素屬性等操作。 我們的XML檔案,內容如下: employee.xml <?xml version="1.0" encoding="UTF-8" sta
Cloudera Manager安裝之Cloudera Manager 5.3.X安裝(三)(tar方式、rpm方式和yum方式)
前期部落格 ClouderaManager官網安裝 https://www.cloudera.com/documentation/manager/5-0-x/Cloudera-Manager-Installation-Guide/cm5ig_install_path_
【Unity3D基礎教程】給初學者看的Unity教程(三):通過製作Flappy Bird瞭解Native 2D中的Sprite,Animation
引子 上一次我們講了MonoBehaviour的前世今生,瞭解了遊戲中的每一個GameObjec都是由指令碼控制的,這一次我們開始將Unity中Native 2D中的Sprite,並且使用Animation來讓Sprite動起來。 在接下來的幾篇部落格裡,我會通過做一個Flappy Bird來講解
Linux下的訊號(三)----捕捉訊號與sleep模擬
Linux下的訊號(一):訊號的基本概念與產生 Linux下的訊號(二):阻塞訊號 一,什麼是捕捉訊號? 1,捕捉訊號:訊號處理方式三種方式中的一種,意思是既不忽略該訊號,又不執行訊號預設的動作,而是讓訊號執行自定義動作。捕捉訊號要使用signal函式
QT和opencv學習(三)Qt訊號槽
所謂訊號槽,簡單來說,就像是插銷一樣:一個插頭和一個插座。怎麼說呢?當某種事件發生之後,比如,點選了一下滑鼠,或者按了某個按鍵,這時,這個元件就會發出一個訊號。就像是廣播一樣,如果有了事件,它就漫天發聲。這時,如果有一個槽,正好對應上這個訊號,那麼,這個槽的函式就會執行,也就
OpenGL學習筆記(三)OpenGL繪製方式
(1)OpenGL圖元 點:void glPointSize() 線、條帶、迴圈線:void glLineWidth() 三角形、條帶、扇面: 將多邊形渲染為點集、輪廓或者實體: P68 正反面採用不同的方式繪製: glPolygonMode(GL
Linux程序通訊(三)IPC訊號
若通過kill命令把其中一個程序殺死,且該程序還沒有執行V操作釋放資源。若使用SEM_UNDO標誌,則作業系統將自動釋放該程序持有的訊號量,從而使得另外一個程序可以繼續工作。若沒有這個標誌,另外程序將P操作永遠阻塞。
Scrapy原始碼分析(三):訊號管理器SignalManager
類的位置scrapy.signalmanager.SignalManager。主要是對pydispatch.dispatcher的一層封裝。 首先來看看pydispatch.dispatcher都有哪些功能:專案主頁 這個模組主要提供了訊息的傳送和接收功能,主頁的示例:
Spark基礎入門(三)--------作業執行方式
(一)SparkContext 代表對叢集的一個連線 驅動程式通過sparkContext連線spark叢集 每個JVM只允許啟動一個SparkContext,一個sparkContext連線代表一個application,每個application中可能有多個job(jo
linux系統程式設計之訊號(三):訊號的阻塞與未決
/************************************************************************* > File Name: process_.c > Author: Simba > Mail: [email
在 unity 中使用三種簡單的方式實現實時時鐘動畫
目標 這非常容易實現。你需要寫幾行程式碼就可以實現了。在這篇文章中,我們將實現兩種動畫方式。 效果圖 數字時鐘型別 模擬時鐘型別 在開始編碼之前,我想要告訴你一些下面會用到的關於 unity 的知識。 什麼是材質 在 unit
控制反轉IOC的依賴注入方式 【調侃】IOC前世今生 IoC模式 談談對Spring IOC的理解 一個簡單的小程式演示Unity的三種依賴注入方式 小菜學習設計模式(五)—控制反轉(Ioc) IoC模式(依賴、依賴倒置、依賴注入、控制反轉) IoC模式
轉自:https://www.cnblogs.com/ysyn/p/5563256.html 引言: 專案中遇到關於IOC的一些內容,因為和正常的邏輯程式碼比較起來,IOC有點反常。因此本文記錄IOC的一些基礎知識,並附有相應的簡單例項,而在實際專案中再複雜的應用也只是在
【遠端呼叫框架】如何實現一個簡單的RPC框架(三)優化一:利用動態代理改變使用者服務呼叫方式
【如何實現一個簡單的RPC框架】系列文章: 這篇部落格,在(一)(二)的基礎上,對第一版本實現的服務框架進行改善,不定期更新,每次更新都會增加一個優化的地方。 1、優化一:利用動態代理改變使用者服務呼叫方式 1.1 目的 改變使用者
自定義統一api返回json格式(app後臺框架搭建三)
pub ble ace proc 2.3 resp think err ons 在統一json自定義格式的方式有多種:1,[email protected]/* */,2,自定義一個註解,自己去解析對象成為json字符串進行返回 第一種方式,我就不推薦,想弄得的
微信公眾平臺開發教程(三) 基礎框架搭建
開發 images wxs user 設計實現 bytes trre 來源 app 上一章,我們已經初步講解了微信公眾賬號開發的基本原理,今天我們來探索設計實現。 首先我們設計了模塊層次圖,當然圖中只是給出一種實現方式,不局限於此。具體見下圖。 主要功能介紹如下: 1)請求