0
点赞
收藏
分享

微信扫一扫

【Unity】 HTFramework框架(四十二)【进阶篇】使用依赖注入(控制反转模式)


更新日期:2022年1月4日。
Github源码:​​​[点我获取源码]​​​ Gitee源码:​​[点我获取源码]​​

索引

  • ​​依赖注入​​
  • ​​使用​​
  • ​​InjectPath​​
  • ​​InjectUI​​
  • ​​作用域​​

依赖注入

控制反转模式是一种经典设计模式,关于其概念我就不再过多描述,直接进入正题,目前这里仅支持两种​​依赖注入​​方式:

1.InjectPath:通过路径注入依赖;
2.InjectUI:注入UI逻辑类对象;

使用

InjectPath

​InjectPath​​​只能注入​​GameObject​​​或​​组件​​,通过路径注入:

public class Test : HTBehaviour
{
protected override bool IsAutomate => true;

[InjectPath("LeftFight")]
private GameObject _leftFightObj;

[InjectPath("LeftFight")]
private Fight _leftFight;

[InjectPath("Collider")]
private BoxCollider _collider;
}

比如此处,​​Test​​​脚本所挂载物体的名为​​LeftFight​​​的子物体会被注入到​​_leftFight​​字段,其他同理。

【Unity】 HTFramework框架(四十二)【进阶篇】使用依赖注入(控制反转模式)_控制反转模式

Tips:路径注入很简单,就跟查找子级物体一个意思。

InjectUI

而​​InjectUI​​只能注入UI逻辑类对象,通过类型注入:

public class Test : HTBehaviour
{
protected override bool IsAutomate => true;

[InjectUI]
private UIGame _uiGame;

private void Start()
{
Debug.Log("UIGame 是否已打开:" + _uiGame.IsOpened);
}

private void Update()
{

}
}

比如此处,将尝试获取​​UIGame​​​类型对象并注入到​​_uiGame​​字段。

【Unity】 HTFramework框架(四十二)【进阶篇】使用依赖注入(控制反转模式)_unity_02


Tips:由于​​UI逻辑类对象​​始终是唯一的,所以在任何地方,注入的相同类型的UI逻辑类对象始终都是同一个实例。

作用域

需要注意的是,这两种注入方式并非是全域支持的,他们仅在如下几种情况下被支持使用:

1.继承至​​HTBehaviour​​​的脚本(新建的脚本默认继承此类);
2.​​实体模块​​;
3.​​UI模块​​;
4.​​FSM​​(状态、参数、数据);


举报

相关推荐

0 条评论