Unity strangeioc框架初识

最近项目中用到这个架构,恰好学习下,网上看了不少资料,良莠不齐,对于刚接触的人来讲本不太容易,经过在几天的学习与网上资料的翻阅整理下学习心得。网上有英文文档,地址:http://strangeioc.github.io/strangeioc/TheBigStrangeHowTo.htmlhtml

strangeioc是一个超轻量级和高度可扩展反转(IOC)框架,专门为c#和Unity编写,它是基于MVC框架扩展的。即MVCS框架。M(models),V(view),C(controller),S(services)。它是依据控制反转和解耦原理设计的,支持依赖注入。git

控制反转(Inversion of Control,英文缩写为IOC),个人理解就是,本来A类要获取B类的对象,须要你在A类中本身New一个对象,那么是由A来获取并控制B的对象,IOC就是把对象获取的这个过程交给容器和依赖注入来处理,A类并不知道B的对象是哪里来的,对B对象的控制,由本身变成了其余类,官方一点的概念能够百度,这个仍是蛮多的。出自蓝天小僧github

整个框架类图以下:c#

Root:

继承自ContextView, ContextView继承自MonoBehaviour,通常会在这里建立一个本身的继承于MVCSContext的类, 它属于框架的入口服务器

MVCSContext:

初始化全部的绑定,如Injection, Command,Dispatcher架构

CONTROLLER:

大部分游戏逻辑处理放在这一层,链接VIEW和SERVICES,MODELS层,起到数据管理的做用。框架

VIEW:

游戏中的UI,人物,战斗画面等一切用户能够看到的场景,均在这一层。函数

细分为view和mediator(中间层),UI和数据分离,view负责显示画面,mediator经过Dispatcher发送数据请求,与CONTROLLER层进行交互,起到数据交流中转站的做用。post

SERVICES层:

服务层,游戏中的数据(金币,用户信息等)经过SERVICES层与外界交互,链接服务器取得数据。基本上与外部(游戏服务器)等的数据交流均经过SERVICES层完成。学习

MODEL:

数据模型,例如人物属性模型

WEB:

能够理解为游戏服务器。

Dispatcher:

派发器是框架内通讯主线的其中一种,用来派发消息,触发命令,从而进一步解耦

Signal:

信号是框架内另一种通讯主线,它采用强类型,来绑定信号和命令之间的关系,实现消息响应的触发

ReflectionBinder:

反射部分,经过binding来获取类的信息,存储在ReflectedClass中

injector:

注入器,经过反射获取的信息,来实例化请求的对象

StrangeIOC执行流程

首选是咱们本身定义的context:它会调用MVCSContext构造函数依次向上类推->CrossContext->Context构造函数

在此会调用图示两个函数,addCoreComponents函数用来指定核心组件的绑定关系,Start函数初始化框架

在Start函数中调用

instantiateCoreComponents:生成了全部这些核心组件的实例

mapBindings():映射绑定区域

postBindings:这是一个十分有用的地方放一些你须要在绑定以后运行的代码。可是他运行在Launch()以后,MVCSContext用这个方法去处理任何Views界面哪个在寄存器中更早(在mapBindings以后被调用)。另外一个明显的和有用的状况  在postBindings()中调用DontDestroyOnLoad(ContextView)。在你加载一个新的场景时用来保留ContextView(and the Context)。

能够发现全部的绑定关系都是由injectionBinder来存储的,那么这个injectionBinder是怎么来的呢

经过上面两图可知injectionBinder是在CrossContext中的属性中本身new出来的,并无依靠依赖注入,而在CrossContextInjectionBinder的基类InjectionBinder中能够看到注入部分所需的组件,都是在它的构造中自动生成的,显然,它是全部其余组件初始化的关键