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

原文链接:http://www.doriandeng.cn/post/2008/05/look-into-unity-1-x-resolveobject.aspx

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

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

根据类型获取对象

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

 

根据类型和名称获取对象

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

 

获取指定类型的所有对象

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

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

示例代码如下:

 

将依赖注入已有的对象

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

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

 

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

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

小结

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

更多信息,请参考《Unity 1.x 中文文档》。

源代码下载

look-into-unity-1-1-resolveobject.zip

希望对您有所帮助!

posted on   执法长老  阅读(1514)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理

导航

< 2008年12月 >
30 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10
点击右上角即可分享
微信分享提示