• (转)Unity(四):使用场景Ⅰ:建立类型映射


    原文地址:http://www.cnblogs.com/kebixisimba/archive/2008/04/19/1161405.html

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

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

    • 建立类型映射
    • 用于单例模式
    • 用于依赖注入

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

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

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

    • 用接口类型作为标识键

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

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

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

    image

    image

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

    • 用基类作为标识键

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

    image

    image

     image

    有趣的是,这里如果直接container.RegisterType<Logger, Logger>();的话,是可以Resolve出来的,但是如果我们container.RegisterType<ILogger, ILogger>();的话,运行时就会报异常了。

    • 用接口(或基类)与名称的组合作为标识键

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

    image

    image 

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

     

  • 相关阅读:
    MySQL用户管理
    MySQL函数
    MySQL数据类型
    MySQL配置
    PowerDesigner之PDM检查
    PowerDesigner之PDM(物理概念模型)
    .NET Reflector反编译的方法
    IBatis.net 输出SQL语句(七)
    SVN 记录冲突、忽略
    SQLServer 窗口函数
  • 原文地址:https://www.cnblogs.com/fcsh820/p/1866970.html
Copyright © 2020-2023  润新知