
Zenject
文章平均质量分 65
Zenject依赖注入框架
夜槿笙歌
这个作者很懒,什么都没留下…
展开
-
01-Zenject快速开始
Zenject是为Unity构建的轻量级高性能依赖注入框架,它可以将应用程序转变为高度分工且松散耦合的集合。Zenject的GitHub页面首先前往Unity Asset Store搜索Extenject(改名了)找到如下图所示的插件,添加到资源库后在项目中导入即可。导入成功后会在工程的资源目录中添加Zenject在场景中创建一个Scene Context在资源目录中创建一个Mono Installer创建一个游戏物体并将Installer脚本挂载在物体上将创建的游戏物体添加到SceneContext的Mo原创 2022-07-03 16:45:29 · 1047 阅读 · 0 评论 -
02-Zenject注入方式
根据方法的参数类型,自动申请实例,参数可以有多个。2.成员变量注入成员变量注入发生在构造方法之后。Zenject会遍历所有用标记的成员变量,并从容器中查找并返回对应的实例。无论成员变量是私有的还是公共的,都会进行注入。3.属性器注入属性器注入的工作原理与成员变量注入相同,只是把注入的对象换成了属性。即便set被设置为private也可以正常注入。构造方法注入是一种特殊的方法注入,可以在对象实例化时注入。...原创 2022-07-03 16:46:10 · 260 阅读 · 0 评论 -
03-Bind绑定
每一种依赖注入的框架其实都只是将一种类型绑定到实例的框架。 在Zenject中,绑定就是向容器注册给定的类型,然后容器通过递归解析给定对象的所有依赖关系,并创建对象的实例。要告诉容器如何解析这些依赖项,就要通过Bind命令来实现。在具体讲解Bind命令之前,要先了解什么是容器。在没有使用依赖注入框架之前,我们通过手工管理依赖对象。一般是在类中主动创建依赖对象,从而导致类与类之间高度耦合。在使用了依赖注入框架之后,创建和查找依赖对象的工作交给了IOC容器,由容器统一创建并注入对象,因而对象之间是松散耦合,便原创 2022-07-03 20:29:49 · 765 阅读 · 0 评论 -
04-Installer安装器
Installer意为安装器,可以使一组绑定操作进行复用,主要分为以下三种:(1)Installer:普通的Installer,需要手动进行安装操作(2)MonoInstaller:可以挂载在GameObject上,当GameObject所在的SceneContext激活时,进行安装操作(3)ScriptableObjectsInstaller:可序列化、可配置的Installer让一个类实现Installer接口,重写InstallBindings方法,并在方法中执行绑定操作。之后就可以直接通过类名原创 2022-07-07 19:58:25 · 1081 阅读 · 0 评论 -
05-使用非MonoBehaviour类
Unity中的脚本都默认继承MonoBehaviour类,该类提供了游戏循环中的各类回调函数。但在有些情况下我们不需要MonoBehaviour中提供的如此多的方法,此时如果仍然继承MonoBehaviour就会造成资源的浪费。Zenject提供了如下几个接口,让普通类也可以使用类似于MonoBehaviour中的回调函数。等同于Unity中的Start方法,一般用于给对象进行一些初始化操作。只需要让类实现IInitializable接口,然后实现接口提供的Initialize()方法,最后绑定到容器即可原创 2022-07-07 19:59:01 · 466 阅读 · 0 评论 -
06-Factories工厂
当我们需要在游戏运行过程中动态创建新对象(如动态生成新的“敌人”实例),同时又需要新生成的对象注入依赖关系,推荐的实现方式是使用工厂。PlaceholderFactory是最简单也是最常用的一种工厂,它的基本用法如下:上面通过使用,所有的依赖(Player)都将被自动注入。我们也可以为工厂添加参数,比如Enemy的构造函数中需要一个float类型的speed参数,我们只需要在继承PlaceholderFactory时扩展泛型列表即可:,与之相对的,在绑定到容器时也需要有对应的泛型列表:。在某些情况下,我原创 2022-07-07 19:59:40 · 183 阅读 · 0 评论 -
07-Signals信号
假设现在有两个类A与B,它们之间要进行通信。假设让他们直接调用彼此的方法,那么A与B之间就是强耦合的。随着工程逐渐增大,这种形式的耦合将使项目极难维护与扩展。那么如何让需要相互通信的类之间进行解耦呢?观察者模式是一种很好的解决方案,即建立一个专门负责消息分发的中心,A与B之间的通信转变为“发送者发送消息到消息中心,消息中心将消息传递到接收者”这种模式。Zenject提供的Signals就对应了这种模式。首先我们需要创建一个表示信号的实体类,注意实体类中随信号传递的所有参数都应该是public的成员或属性:原创 2022-07-07 22:56:33 · 260 阅读 · 0 评论