深入Unity 1.x依赖注入容器之三:获取对象

通过前二部分的学习,对象的获取已非常简单,在此对前面用过的对象获取方法进行总结 ,同时对还没有使用过的方法进行补充。

Unity 容器中获取对象的方法也包括了泛型方法和对之对应的非泛型重载,在此,仅对泛型方法进行描述。

根据类型获取对象

我们使用方法 Resolve<T>( ) 来根据类型获取对象。这种方法是在前二部分使用最多的,用于获取注册的默认类型映射的对象。示例代码如下所示:


根据类型和名称获取对象

在此使用方法 Resolve<T>(string name) 来根据类型和名称获取对象。此方法用于获取注册了命名类型映射的对象。示例代码如下所示:


获取指定类型的所有对象

要获取指定类型的所有对象,我们可以使用 Unity 中的 ResolveAll<T>( ) 方法。比如,在获取系统中已注册的所有插件时,这将非常有用。

注意:此方法仅能获取命名类型注册映射的对象。

示例代码如下:

计算机系统">
将依赖注入已有的对象

在现实环境中,我们经常无法控制某些对象的创建过程,如 ASP.NET 的页面,但已需要将依赖注入到这些对象。在这种情况下,我们就可以使用 BuildUp<T>(T existing) 方法对应用指定类型的依赖。

我们用一个简单的方法来模拟这种情况:


从上面的代码中我们可以看到,假如 tel 是在方法外被创建的话,通过使用 BuildUp 方法后,依赖就被自动应用到了 tel 对象上。

注意:BuildUp 方法仅能适用属性注入和方法调用注入,因为它不执行请求对象的构造函数。

小结

在本文中,我们简单描述了对象获取的几种方法,可以看出,使用 Unity 容器在注册类型映射后,对象的获取是非常简单的。

本文配套源码

时间: 2024-08-01 17:43:37

深入Unity 1.x依赖注入容器之三:获取对象的相关文章

深入Unity 1.x依赖注入容器之四:依赖注入

Unity 是一个依赖注入容器,自然依赖注入是它最重要的功能.从以往的讨论来看,矛盾都集中于 Unity 侵入了依赖的对象,这可能是 Unity 在预览版的文档中没有说明,加上某个外国牛人的某篇文章造成的恶果.因为,Unity 同样可以通过配置文件支持非侵入式的依赖注入.本文将从使用 Attribute 和配置文件两个方面对 Unity 的依赖注入的支持进行阐述. Unity 支持构造函数.属性和方法调用注入. 构造函数注入 构造函数注入包含了二种情况,一种是类仅有一个构造函数时,Unity 可

深入Unity 1.x依赖注入容器之一:入门

Unity 是由微软开发的一个轻量级.可扩展的依赖注入(Dependency Injection, DI)容器,支持构造函数.属性和方法的依赖注入.所谓依赖的注入,即将程序开发过程中的对象与其所依赖的具体对象解耦,从一定程度上仅关注对所依赖对象的使用,却不管其具体对象是哪个类的实例:而真正的被依赖对象在运行时由容器注入.本质上,它就是一个对象工厂和对象管理器.更详细的信息,请参见<IoC 容器和Dependency Injection 模式>. Unity 适用于可扩展.可插接的应用程序的开发

Composite Application Guidance for WPF(5)——依赖注入容器

依赖注入容器和Prism的基础服务已经在本系列随笔中提到过很多次,今天将其分离出来专门说一说 1, 为什么要使用依赖注入容器 我们知道, 在Composite Application中各个模块之间是松耦合的关系, 也就是在设计的时候尽可能地减少模块间的依赖, 但无论如何从业务角度讲, 他们之间总还是要相互通信与合作的. 所以依赖注入容器在这其中扮演了一个桥梁般的角色. 比如当创建某一个组件实例的时候, 其依赖于另外的一个组件或服务, 此时依赖注入容器会将其需要的信息"注入(Injection)&

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(6)-Unity 2.x依赖注入by运行时注入[附源码]

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(6)-Unity 2.x依赖注入by运行时注入[附源码] Unity 2.x依赖注入(控制反转)IOC,对于没有大项目经验的童鞋来说,这些都是陌生的名词,甚至有些同学还停留在拉控件的阶段. 您可以访问http://unity.codeplex.com/releases得到最新版本的Unity现在.当然,如果您在您的visual studio 中安装了Nuget 包管理器,你可以直接在Nuget中获取到最

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

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

微软名为Unity的依赖注入Application Block

微软模式与实践小组发布了叫做Unity或者Unity Application Block的依赖注入容器.开发人员现在能够利用可扩展的轻量级容器创建松耦合应用. InfoQ有机会采访了Unity项目的开发领头人Chris Tavares. Rob Bazinet (RB): Chris介绍一下你自己和你是如何参与Unity的? Chris Tavares (CT):我的名字叫Chris Tavares.我是微软模式与实践小组的一名高级软件开发人员.我目前正在领导Enterprise Library

微软依赖注入Unity

Unity是一个依赖注入(Dependency Injection,DI)容器.DI的标准描述文章来自Martin Flower[0].作为一个快速的摘要,依赖注入容器就是一个用于构建高度松耦合的软件的工具.依赖注入容器处理相互关 联对象的所有细节,因此你可以构建一个独立的组件 关于依赖注入这是百科的解释:http://baike.baidu.com/view/1800021.htm 这是unity的地址:http://unity.codeplex.com/下载最新的是2.1版本,http://

Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)

在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建了一个简单的基于泛型的仓储模式的框架,例子也呈现了一个实体框架应用的雏形,本篇继续介绍这个主题,继续深化介绍Entity Framework 实体框架的知识,以及持续优化这个仓储模式的实体框架,主要介绍业务逻辑层的构建,以及利用Unity和反射进行动态的对象注册. 1.EDMX文件位置的调整 我们从上篇例子,

Unity(七):使用场景Ⅲ:用于依赖注入(下)

Fluent interface 上一篇文章我使用到了Fluent interface这个特性,但是这一点忘了交代了,不好意思...补上! 先来看段代码: 咋看上去,可能会有些不习惯,但是再仔细看,又会觉得表意很清楚,能够很顺畅的把这段代码阅读下来.这个特性叫做Fluent interface(我还不清楚中文统一的翻译是什么),具体可以参见Martin Fowler的http://martinfowler.com/bliki/FluentInterface.html一文,这个概念也是Martin