Unity 的延时加载(defer resolve)
2016-02-26 17:03
267 查看
为什么会有这样的需求呢?resolve之前不注册的话出错是必然的啊。我还真遇到了这种用延时加载才能解决问题的情况。
为了代码的质量着想,我不想加编译条件,不想加条件,也不想改别人的代码。这是前提。
事情是这样的,代码中用到了一个公共模块,这个模块类用单件的形式进行调用,没有纳入Unity Container的管理。当我需要加测试代码时,这家伙就成了拦路虎。首先我想到了用DependencyAttribute独立出这个公共模块,然后设想当没有注入时属性时该值会为空。按部就班的加入代码测试过程很顺利,也没产生什么问题。但当我切换到真实环境中后,发现标记Dependency的属性必须要被注入,否则会产生异常。
还好Unity 提供了defer resolve的特性,使用很简单在需要解析的类型上包一层Func。不过事情没那么简单,只用Func包装的话,初始化没有问题了。但是调用的话还是会抛出异常。幸好还有二号方案,先用IEnumerable再用Func对原始类型进行封装。在注册时进行命名注册。这样的话解析时就可以根据序列的长度判断是否有该类型进行注册了。注意注册时必须命名注册,否则是不会识别为序列的。
以上。
为了代码的质量着想,我不想加编译条件,不想加条件,也不想改别人的代码。这是前提。
事情是这样的,代码中用到了一个公共模块,这个模块类用单件的形式进行调用,没有纳入Unity Container的管理。当我需要加测试代码时,这家伙就成了拦路虎。首先我想到了用DependencyAttribute独立出这个公共模块,然后设想当没有注入时属性时该值会为空。按部就班的加入代码测试过程很顺利,也没产生什么问题。但当我切换到真实环境中后,发现标记Dependency的属性必须要被注入,否则会产生异常。
还好Unity 提供了defer resolve的特性,使用很简单在需要解析的类型上包一层Func。不过事情没那么简单,只用Func包装的话,初始化没有问题了。但是调用的话还是会抛出异常。幸好还有二号方案,先用IEnumerable再用Func对原始类型进行封装。在注册时进行命名注册。这样的话解析时就可以根据序列的长度判断是否有该类型进行注册了。注意注册时必须命名注册,否则是不会识别为序列的。
以上。
相关文章推荐
- Unity获取场景gameobject的路径
- Ubuntu unity 桌面正常工作在VNC上
- Unity3D 学习 控制角色运动控制
- Unity NGUI之ScrollView扩展-2
- unity 导出包后 xcode build 报错il2cpp_codegen_initialize_method
- Unity NGUI之ScrollView扩展-1
- Unity5.3 JSON的序列化
- unity 5.3 的 JSON Serialization
- unity 固定管线shader转换到顶点片段着色器
- Unity关于 "Move" can only be called on an active agent that has been placed on a NavMesh.问题的解决办法
- unity3d调用jar类中的方法和属性
- Unity for iOS 打开相册、相机及保存图片到相册
- Unity 5 中的全局光照技术详解
- Unity重复开关Collider造成的刚体Bug,以及重现
- Unity 几种比较简单的加载动画
- Unity3D Shader官方教程翻译(四)
- Unity3D自定义以及Assets Store包导入
- Unity3D Shader官方教程翻译(三)
- 全系列Unity4.x.x到5.3.2f1破解Win&Mac!最新Unity5.3.2p4&4.7破解!
- Unity3D Shader官方教程翻译(二)