在之前的一篇文章“Unity(三):快速入门”中,给出了一个简单的示例,让我们对Unity有一个感性的认识。但是,Unity到底是做什么用的呢?一个简单示例并不能解答这个问题。

  总的来看,Unity的使用场景主要有以下几个:

  建立类型映射

  用于单例模式

  用于依赖注入

  接下来,将逐一介绍各使用场景。

  在创建对象时,毫无疑问,类型映射是我们无法回避的一个问题,同时也是一系列工厂模式的根本出发点。类型映射,为面向对象设计的根本原则——“针对接口编程,而不是针对实现编程”、“要依赖抽象,不要依赖具体类”——在应用中的实现,提供了有力的支持。

  我们知道,Unity提供了对象的容器,那么这个容器是如何进行索引的呢?也就是说,容器内的单元是如何标识的呢?在Unity中,标识主要有两种方式,一种是直接使用接口(或者基类)作为标识键,另一种是使用接口(或者基类)与名称的组合作为标识键。键对应的值就是具体类。

  用接口类型作为标识键

  实际上,之前的“Unity(三):快速入门”中给出的例子,就是接口类型作为标识键的一个使用场景,这里就不再重复。

  这里需要指出的是,Unity提供的功能都有泛型和非泛型两个版本,这样可以确保 Unity 在不支持泛型的环境中使用。我们在代码中可以使用任意一种方法(泛型和非泛型),或者根据需要混合使用。例如,可以使用泛型形式来注册映射,然后使用非泛型形式去获取对象实例

下面的代码演示了非泛型形式的使用:

  ps:接下来的例子以及后续文章中的例子将不再演示非泛型形式的使用。

  用基类作为标识键

  用基类作为标识键,在本质上与用接口类型作为标识键是一样的。这里需要注意的是,基类并不一定是指抽象类。下面是使用基类作为标识键的例子:

  有趣的是,这里如果直接container.RegisterType<Logger, Logger>();的话,是可以Resolve出来的,但是如果我们container.RegisterType<ILogger, ILogger>();的话,运行时就会报异常用接口(或基类)与名称的组合作为标识键

  如果需要使用同样的接口(或基类)注册多个映射,可以指定名称来区分每个映射。在需要Resolve的时候,通过指定接口(或基类)与名称的组合作为标识键,就可以获取恰当类型的对象。下面的例子以接口与名称的组合为例,基类与名称的组合作为标识键同理,不再赘述(有关Ilogger等代码见“Unity(三):快速入门”中给出的准备代码)。:

  这里需要指出的是,注册名称是一个字符串,如果需要,可以包含空格。它们是大小写敏感的。例如,名称“Mymapping”和“MyMapping”将指的是二个不同的注册映射。

了。

转载于:https://www.cnblogs.com/wukong0214/archive/2013/01/21/2870356.html

Unity(四):使用场景Ⅰ:建立类型映射相关推荐

  1. Unity中实现Hololens的三维空间映射Spatial mapping

    hololens最出色的功能就是他对环境的空间扫描和重建功能,在unity的Hololens示例中,有完整的三维重建代码,本文主要讨论如何在Unity项目中集成空间映射功能.Unity内置了对空间映射 ...

  2. ES倒排索引及类型映射与分析器(SE倒排及搜索实现基础)

    ES倒排索引及类型映射与分析器/SE倒排及搜索实现基础 前言 1 数据类型映射 2 非结构化的全文文本查询与倒排索引(模糊的相关度的查询方式与倒排索引) 3 分析器 3.1 字符过滤器 3.2 分词器 ...

  3. Unity 3D 环境特效||Unity 3D 游戏场景设计实例

    Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程. Unity 3D 游戏开发引擎为了能够简单地还原真实世界中 ...

  4. 消息队列使用的四种场景介绍

    一.简介 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ,RabbitMQ,Zer ...

  5. WIN7建立网络映射磁盘

    建立网络映射磁盘 如果需要经常访问网络中的同一个共享文件夹,则可以将这个共享文件夹直接映射为本地计算机中的一个虚拟驱动器.其具体操作如下. (1)双击桌面上"计算机"图标,打开&q ...

  6. [C++11]不允许使用auto的四个场景

    不允许使用auto的四个场景: 1.不能作为函数参数使用,因为只有在函数调用的时候才会给函数参数传递实参,auto要求必须要给修饰的变量赋值,因此二者矛盾. 代码如下: //error int fun ...

  7. java 不同类型 映射_如何使用Java泛型映射不同的值类型

    java 不同类型 映射 有时,一般的开发人员会遇到这样的情况,即他必须在特定容器内映射任意类型的值. 但是,Java集合API仅提供与容器相关的参数化. 例如,这将HashMap的类型安全使用限制为 ...

  8. FreeSql (三十三)CodeFirst 类型映射

    前面有介绍过几篇 CodeFirst 内容文章,有 <(二)自动迁移实体>(https://www.cnblogs.com/FreeSql/p/11531301.html) <(三) ...

  9. mybatis date类型映射_Mybatis中类型映射处理器详解

    上一篇梳理了Configuration初始化分析,今天继续typeHandlers部分. 数据库厂商标识 接上一篇文章分析,下一个解析的是databaseIdProvider节点,这个节点好理解,从字 ...

最新文章

  1. 吴恩达机器学习视频及答案2018
  2. DP mixture model
  3. 建立自己的git账户并保存资料的重要性
  4. linux删除文件夹提示没找到,Win10中遇到删除文件夹提示找不到该项目的解决过程...
  5. erp系统服务器怎么关机,服务器怎么设置自动关机
  6. 深度 | 从DevOps到BizDevOps, 研发效能提升的系统方法
  7. 案例分析--AD客户端登录验证缓慢问题
  8. 软件定义汽车带来的困境---如何破局?
  9. 【Arthas】Arthas 类查找和反编译原理
  10. 看完这一篇,运维误删后再也不用跑路了
  11. Atitit java播放器调音速率快慢的实现 目录 1.1. 原理 本质上是改变采样率即可 1 2. 使用Java增加/降低AudioInputStream的音频播放速度(Increase/dec
  12. 用springMVC拦截器实现操作日志管理功能
  13. SpringBoot整合Redis
  14. 周立功USB-CANII(linux版)与Qt线程结合
  15. 月报总结|2月份Moonbeam最新进展
  16. 安卓项目查手机电量功能_Android获取手机电池电量用法实例
  17. WINCC与STEP7的仿真连接_过路老熊_新浪博客
  18. [爬虫]字节跳动招聘爬取实战-csrf校验
  19. NB-IOT修改KV值的方法
  20. 佟大为新任《非诚》嘉宾 极力反对异地恋

热门文章

  1. 十二、HTML5新增标签特性详解(audio、video、input)
  2. 利用bds和dfs解决 LeetCode 107. Binary Tree Level Order Traversal II
  3. LeetCode 2110. 股票平滑下跌阶段的数目(滑动窗口)
  4. LeetCode 909. 蛇梯棋(BFS)
  5. LeetCode 825. 适龄的朋友(计数排序+前缀和)
  6. LeetCode MySQL 1083. 销售分析 II
  7. 程序员面试金典 - 面试题 01.01. 判定字符是否唯一(位运算,牛)
  8. LeetCode 541. 反转字符串 II
  9. LeetCode 494. 目标和(DFS+DP)
  10. LeetCode 589. N叉树的前序遍历(前序遍历)