Zenject

本文介绍了Zenject,一种Unity中的依赖注入框架。通过添加ZenjectBinding组件到游戏对象上,可以将MonoBehaviour实例自动注册到Zenject容器中,实现依赖的自动管理。例如,可以在场景中添加Foo类型的MonoBehaviour,再配合ZenjectBinding组件来配置依赖。
摘要由CSDN通过智能技术生成

原文链接:https://hiramtan.wordpress.com/2017/08/17/zenject/

QQ群: 83596104

1.单键创建通过bind方式创建,其他构造函数有依赖其他此单例时会自动匹配类型注入.
2.大量对象(5个巨魔怪)的创建通过factory创建.

20170815
很早前有尝试过strangeioc,两年后接触过zenject然后好久都没有再用,今天打算重新拾起并且依托一个中小型项目来验证下.
strangeioc VS zenject 选后者的原因是后者持续更新,而strangeioc好久没有更新过了
zenject是一个轻量级的依赖注入框架,专为unity设计.它能让游戏逻辑低耦合并且每个模块功能划分清晰,zenject负责将模块组织到一起.
让整个游戏逻辑变得方便重用,重构,灵活可扩展.
关于,依赖,控制倒置,注入,控制反转之前有介绍过,这边不再赘述.
使用zenject可以很简单的遵循单一原则:zenject来处理类对象之间的关系,类对象本身只负责实现各自的功能.
使用zenject常见的一个误区是喜欢提取类接口,把接口绑定对象,然后其他各处使用这个接口而不是对象本身.提供接口的方式可以解模块间的耦合,但是有些特殊的类或者单例,提取接口只供这一个类实现是无意义的,还会增加维护成本,当接口需要多个类实现时,定义接口才是有意义的.
在zenject的示例工程中,SceneContext是入口逻辑.
inject方法最后调用,这样可以保证方法内使用的参数全被赋值过.如果注入的方法很多,会先调用父类中的方法,再调用子类中的方法.
注入方法依赖的对象需要提前注入.
因为monobehaviours没有构造函数,使用inject注入依赖对象是推荐的方式.
如果注入的方法是 IEnumerator.它会启动一个coroutine在当前的monobehaviours中运行,或者在Context的monobehaviours运行(比如定义的ienumerator不继承monobehaviours时),经过测试,即便是monobehaviours中注入的方法也会早于start方法执行,这样就可以把注入方法当做构造函数使用了(当自定义mono挂在游戏场景时)
使用经验表明,构造注入好于方法注入好于字段注入好于属性注入.
任何的依赖注入框架最根本就是绑定,将类型绑定到对象.
在zenject中,绑定关系在container中,当container收到请求创建一个对象时,它采用反射的方式查找构造函数需要的参数,查找被[inject]标记的字段属性方法.
然后给他们赋值相应类型的对象.(可以理解成运行前注入了很多对象,当游戏过程中创建一个新对象时,采用反射的方式,查找匹配的对象,然后将提前创建好的对象赋值过去)
public class Foo
{
    IBar _bar;

    public Foo(IBar bar)
    {
        _bar = bar;
    }
}

You can wire up the dependencies for this class with the following:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值