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

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

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

建立类型映射

用于单例模式

用于依赖注入

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

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

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

用接口类型作为标识键

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

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

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

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

时间: 2024-12-21 22:30:07

Unity(四):使用场景Ⅰ:建立类型映射的相关文章

请教C++调用DLL改用C#调用DLL方法和类型映射

问题描述 现在有一个C++的dll,原来是C++项目使用,现在有一个C#项目想使用这个DLL,调用这个dll的时候一些类型映射,不知道C++中的类型,应该映射成C#中的什么类型,该怎么写,请教大神.C++调用DLL的代码如下主要不知道下面这三种C++中的参数,用C#改写该映射成什么类型constTCHAR*sLogDirconststd::list<conststd::pair<LPCSTR,LPCSTR>>&listParamsParamPair*pPairs reape

hibernate中java.util.Date类型映射

在Hibernate中对于java.util.Date类型的映射为: java类型 Hibernate类型 Mysql类型 java.util.Date.java.sql.Date date DATE java.util.Date.java.sql.Time time TIME java.util.Date.java.sql.Timestamp timestamp TIMESTAMP 如果使用timestamp作为Date类型映射时,具体代码如下: Java代码 public class Use

利用Eclipse Modeling Framework加强JAX-RPC类型映射的功能

引言 JAX-RPC,也称为 JSR-101,是完成标准编程模型的一个重要步骤,该标准编程模型简化了 Java 平台上可互操作的 Web 服务的构建.由 XML 向 Java 类型映射模型的转换是 JAX-RPC 的关键,该转换是 Web 服务产品提供者的一个实现标准.没有这样的模型,Web 服务产品提供者会陷入定义专用类型映射的陷阱中,从而严重影响 Java 的互操作性问题. 虽然 JAX-RPC 在支持 XML 数据类型方面做了大量的工作,但是还有很多地方需要改进.而且,JAX-RPC 需要

[译]Workcation App – 第四部分. 场景(Scenes)和 RecyclerView 的共享元素转场动画(Shared Element Transition)

本文讲的是[译]Workcation App – 第四部分. 场景(Scenes)和 RecyclerView 的共享元素转场动画(Shared Element Transition), 原文地址:Workcation App – Part 4. Shared Element Transition with RecyclerView and Scenes 原文作者:Mariusz Brona 译文出自:掘金翻译计划 译者:龙骑将杨影枫 校对者:张拭心.Feximin Workcation App

C#调用C++ dll,类型映射,请高人赐教

问题描述 如题,C#调用C++dll时,遇到System.AccessViolationException,调了很久了没有效果,求高手赐教,谢谢谢谢!!好久没上论坛了,总共只有22分,见谅!!C++原型是这样的#defineHMCAPI#ifdef__cplusplusextern"C"{#endiftypedefvoid*server_id;//连接平台的返回值typedefstruct_LOGIN_SERVER_INFO{cpcharip;//平台地址uint16port;//平台

用HOSTS文件屏蔽网站 建立网站映射的方法_网络冲浪

文/葛文娟 最初想到利用Hosts文件是基于学校跨网段访问网页时用IP地址访问带来的不便:学校教学网系统分成四个网段,包括三个学生机房网段和一个办公室教师用机网段,服务器没有使用DNS.办公室教师机有的开了PWS(个人Web服务器),教师在同一网段中输入Host Name(主机名)即可顺利访问网页,但在学生机房要访问教师Web页,必须使用IP地址. Hosts是Windows早期用来建立IP地址和Host name(主机名)映射关系的文件.这样在客户机上访问主机时,只要输入主机名即可.随着后来D

Active Record学习笔记(四):处理Many-To-Many映射

本文主要描述了如何使用Castle.ActiveRecord处理Many-To-Many映射.本文主要涉及了两个类:Student(学生).Subject(学科),这两个类的关系是多对多的,因为一个学生学习多个学科,一个学科可以被多个学生学,下面是类图: 主要内容: 1.编写数据库脚本 2.HasAndBelongsToMany属性说明 3.编写实体类 4.编写调用代码 一.编写数据库脚本 由于Student与Subject是多对多关系,这里加入一个关联表Student_Subject来保存这些

关于使用JNA时 C库的 char*[] 到 java的类型映射问题

问题描述 近期在使用JNA封装C库,其中的结构体之一:typedefstructtag_File_Name{char*keyName[];char*confName[];}FILE_NAME;本人在java中映射成:publicclassFILE_NAME_STRUextendsStructure{publicstaticfinalintMAX_FILE_PATH_LENGTH=512;publicstaticfinalintFIRST_DIMENSIONALITY_LENGTH=2;/***K

深入Unity 1.x依赖注入容器之二:初始化 Unity

Unity 初始化主要是注册类型映射并指定其生命周期. 在本文中,我们使用了一个接口 IDialer.一个实现了接口的抽象基类 Dialer,二个继承自 Dialer 的具体类 ButtonTypeDialer 和 FigurePlateDialer 类,以及一个使用 Dialer 的 Telephone 类. 生命周期管理 之所以将生命周期的管理放在开始,是因为Unity 会根据在类型的注册时需要指定的生命周期来管理对象的创建和解析. Unity 使用继承自 LifetimeManager 基