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

Unity 初始化主要是注册类型映射并指定其生命周期。

在本文中,我们使用了一个接口 IDialer、一个实现了接口的抽象基类 Dialer,二个继承自 Dialer 的具体类 ButtonTypeDialer 和 FigurePlateDialer 类,以及一个使用 Dialer 的 Telephone 类。

生命周期管理

之所以将生命周期的管理放在开始,是因为Unity 会根据在类型的注册时需要指定的生命周期来管理对象的创建和解析。

Unity 使用继承自 LifetimeManager 基类的类来决定如何保存对象实例的引用,以及如何销毁对象。Unity 自带了二个用于生命周期管理的类:ContainerControlledLifetimeManager 和 ExternallyControlledLifetimeManager ,下面分别对这二个类进行描述。如果指定了这二种管理方式,无论是以 RegisterType 还是以 RegisterInstance 注册的类型,都将处理成单件对象。

ContainerControlledLifetimeManager 类是指定 Unity 容器管理注册的对象,即对象的生命周期与 Unity 容器一致,在销毁 Unity 时将销毁所有其管理的对象。同时,

ExternallyControlledLifetimeManager 类指定 Unity 仅保持对象的弱引用,对象的保存和销毁由 Unity 容器外部来控制。

如果不需要处理成单件对象,可以在调用 RegisterType 方法时不指定其 LifetimeManager 类,这样 Unity 容器将使用临时生命周期管理,即为每次对获取对象的请求都创建一个新的实例。

用 RegisterType 注册类型映射

RegisterType 包含多个支持泛型的重载,同时还包含了一一对应的非泛型重载。在此仅对其泛型重载进行阐述,非泛型重载与其对应。

RegisterType 注册类型映射可以是注册接口或基类所对应的类型,也可以直接注册类型。对于前者,在此仅给出接口或基类注册的一种,另一种直接替换即可。

RegisterType<TFrom, TTo>( )

此方法注册一个默认的类型映射,并且为获取对象的每次请求创建一个新的实例。例如如下代码:


在上例中的代码中,前二行即是对类型的注册。运行此代码,结果如下:


而这种注册的对应的配置文件如下:

计算机系统">
同时,将上面的代码修改为如下代码:

时间: 2024-11-02 10:04:13

深入Unity 1.x依赖注入容器之二:初始化 Unity的相关文章

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

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

构建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 容器中获取对象的方法也包括了泛型方法和对之对应的非泛型重载,在此,仅对泛型方法进行描述. 根据类型获取对象 我们使用方法 Resolve<T>( ) 来根据类型获取对象.这种方法是在前二部分使用最多的,用于获取注册的默认类型映射的对象.示例代码如下所示: 根据类型和名称获取对象 在此使用方法 Resolve<T>(string name) 来根据类型和名

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

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

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

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

Unity(六):使用场景Ⅲ:用于依赖注入(上)

有关依赖注入 什么是依赖注入,我想这个问题我在这里说就不大合适了,所以还是推荐一下大师的文章.之前的文章也提到过,"Martin Fowler的Inversion of Control Containers and the Dependency Injection pattern 是不得不推荐的,当然,如果读起来比较费劲的话,吕震宇的你真的了解Ioc与AOP吗?系列也是不错的参考". 这里要多说一句的是,依赖注入(Dependency Injection)和控制反转(Inversion

微软名为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://

使用Unity Application Block(三):理解和使用依赖注入的键

在使用 Unity 创建对象之前,需要准备 Unity 容器,也即进行注册(类型映射).在 使用Unity(二):配置 Unity .读取配置信息和获取对象中, 我们学习了如何使用配置文件来进行注册,而在本文中,我们将学习使用代码来进行各种注册,这些代码所实现的功能同样可以使用配置文件来实现. 因为 Unity 自带的文档已在这方面进行了详细说明,所以在此仅对该文档进行了翻译,以下是译文. Unity 应用程序块容器用键以及可选的名称来标识注册(类型映射).键是接口一个接口或者一个类(通常是基类