惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
V
Vulnerabilities – Threatpost
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
SecWiki News
SecWiki News
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
B
Blog
TaoSecurity Blog
TaoSecurity Blog
The Last Watchdog
The Last Watchdog
H
Hacker News: Front Page
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园_首页
D
Docker
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Y
Y Combinator Blog
W
WeLiveSecurity
N
News and Events Feed by Topic
F
Fortinet All Blogs
PCI Perspectives
PCI Perspectives
WordPress大学
WordPress大学
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Recent Announcements
Recent Announcements
Forbes - Security
Forbes - Security
T
Tailwind CSS Blog
Hacker News: Ask HN
Hacker News: Ask HN
爱范儿
爱范儿
腾讯CDC
Last Week in AI
Last Week in AI
月光博客
月光博客
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
Help Net Security
Help Net Security
V
V2EX
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
H
Heimdal Security Blog
L
LINUX DO - 最新话题
GbyAI
GbyAI
The Hacker News
The Hacker News
罗磊的独立博客
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 【当耐特】
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V2EX - 技术
V2EX - 技术
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
O
OpenAI News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 赤脚小子

Workflow WF Reference Links for 2009-03-20 Workflow WF Reference Links for 2009-03-06 Workflow WF Reference Links for 2009-02-20 Workflow WF Reference Links for 2009-02-13 Workflow WF Reference Links for 2009-02-06 Workflow WF Reference Links for 2009-02-01 Workflow WF Reference Links for 2009-01-16 Workflow WF Reference Links for 2009-01-09 Workflow WF Reference Links for 2008-12-30 WF书籍导读(完整版) WF书籍推荐 Unity(七):使用场景Ⅲ:用于依赖注入(下) Unity系列目录 Unity(六):使用场景Ⅲ:用于依赖注入(上) Unity(五):使用场景Ⅱ:用于单例模式 Unity(三):快速入门 Unity(二):Unity是什么? Unity(一):从ObjectBuilder说起 Exception Management in .NET阅读笔记
Unity(四):使用场景Ⅰ:建立类型映射
赤脚小子 · 2008-04-19 · via 博客园 - 赤脚小子

在之前的一篇文章“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”将指的是二个不同的注册映射。