欢迎来到天天文库
浏览记录
ID:55505780
大小:39.50 KB
页数:5页
时间:2020-05-15
《使用 Unty (三):理解和使用依赖注入的键.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在使用Unity创建对象之前,需要准备Unity容器,也即进行注册(类型映射)。在 使用Unity(二):配置Unity、读取配置信息和获取对象中,我们学习了如何使用配置文件来进行注册,而在本文中,我们将学习使用代码来进行各种注册,这些代码所实现的功能同样可以使用配置文件来实现。 因为Unity自带的文档已在这方面进行了详细说明,所以在此仅对该文档进行了翻译,以下是译文。Unity应用程序块容器用键以及可选的名称来标识注册(类型映射)。键是接口一个接口或者一个类(通常是基类)的类型名称,它决定了实现或继承的具体对象的类型。此
2、键标识了映射,所以容器可以在对Get或者GetAll的调用的响应中获取具体的对象类型。在有多个针对同一类型的地方,可选的名称用以区分这些映射,并允许代码指定将使用类型的哪个映射。--来自狗刨学习网本主题的下列章节描述了可以如何使用依赖注入的键: ·用接口的类型做为依赖键·用对象类型名称做为依赖键·组合依赖键和注册名·用于单件对象的依赖键·用于已有对象和BuildUp方法的依赖键·通过依赖键获得所有注册类型的列表用接口类型做为依赖键 做为使用接受接口类型名称的Register和Get方法的重载的示例,下列代码注册了一个用于IM
3、yObject接口的映射,并指定容器将返回MyRealObject类的实例(它实现了IMyObject接口)。在这种情况下,注册键是IMyObject。随后使用键IMyObject请求实例的代码将接收到一个MyRealObject类的实例。此示例使用了容器方法的泛型重载。IUnityContainer myContainer = new UnityContainer();myContainer.Register();IMyObject myRealObjectInstance =
4、 myContainer.Get();另一种方法就是,可以使用未泛型的方法重载。下列代码将得到同样的结果。IUnityContainer myContainer = new UnityContainer();myContainer.Register(typeof(IMyObject),typeof(MyRealObject));IMyObject myRealObjectInstance = myContainer.Get(typeof(IMyObject));注意:前面的二个Unity容器的泛型和非泛型重
5、载确保Unity应用程序块可以在不支持泛型的语言中使用。可以在代码中使用任意一种方法(泛型和非泛型的重载),以及根据需要混合使用它们。例如,可以使用泛型重载注册映射,然后使用非泛型重载获取对象实例,返过来也是一样的。用对象类型名称做为依赖键 在需要注册用于基类或者其他对象类型(不是接口)的映射时,可以使用接受对象类型名称的Register和Get方法的重载,它们不使用泛型代码语法。下列示例展示了接受对象类型名称做为键的Register和Get方法的重载的使用。下列代码注册了一个用于MyBaseObject对象的映射,并指定容
6、器将返回一个MyRealObject类的实例(它继承自MyBaseObject类)。在这种情况下,注册键是MyBaseObject。随后使用键MyBaseObject请求实例的代码将接收到一个MyRealObject类的实例。IUnityContainer myContainer = new UnityContainer();myContainer.Register();MyBaseObject myRealObjectInstance = myContainer.Get<
7、MyBaseObject>();另一种方法是,可以使用方法的非泛型重载。下列代码可以获得同样的结果。IUnityContainer myContainer = new UnityContainer();myContainer.Register(typeof(MyBaseObject), typeof(MyRealObject));MyBaseObject myRealObjectInstance = myContainer.Get(typeof(MyBaseObject));组合注册键和依赖名称如果需要使用同样的名称注册多个映射
8、,就可以指定对象的名称来区分每个映射。然后,指定名称做为键来要获取适当类型的对象。下列代码示范了可以如何注册二个用于同样接口类的映射,然后容器根据在调用的Get方法中指定的键和名称来返回适当的对象类型。此示例使用了容器方法的泛型重载(同样也可以使用用对象类型而不
此文档下载收益归作者所有