Enterprise Library 4.0中的依赖注入容器(Unity)预览
概述
之前我曾发过一篇Enterprise Library 4.0开发计划中提到微软在Enterprise Library 4.0将加入依赖注入容器,暂定名为DIAB,现在微软终于给它起了个正式的名字Unity,难道是“团结”的意思?:),在Unity最终将以两种形式发布:独立的容器组件和作为Enterprise Library 4.0的一部分,用微软的话说“它是一个轻量级的、可扩展的依赖注入容器”,在ASP.NET MVC Framework推出后引起了业界极大的讨论“MS MVC框架漩涡中的MonoRail未来”,不知道Unity推出之后会不会再出现一场“Unity漩涡中的Castle Windsor未来”或者“Unity漩涡中的Spring.Net未来”的讨论。这里先带您提前预览一下Unity。
Unity预览
在Unity中将提供Register方法来注册对象映射,使用Get方法获得对象的实例,基本API如下:
public class UnityContainer : IDisposable { // getting objects public T Get<T>(string key) { } public IEnumerable<T> GetAll<T>() { } // type mapping public UnityContainer Register<TFrom, TTo>(string key) where TTo : TFrom { } // singleton support public UnityContainer SetSingleton<T>(string key) { } // support for registering existing objects public UnityContainer RegisterInstance<T>(T existing, string key, bool overload) { } // running existing objects through the container public T BuildUp<T>(T existing, string key) { } }
典型使用
在Unity中,我们可以像如下代码这样加入组件:
UnityContainer container = new UnityContainer()
.Register<ILogger, TraceLogger>()
.Register<ISomething, Something>();
获取对象实例: ISomething some = container.Get<ISomething>();
用过Castle的朋友一定还记得,这似乎和Castle中的IOC容器非常像,在Castle的IOC容器中加入组件:
IWindsorContainer container = new WindsorContainer( new XmlInterpreter("http://www.cnblogs.com/BasicUsage.xml") ); container.AddComponent( "txtLog", typeof(ILog), typeof(TextFileLog) ); container.AddComponent( "format", typeof(ILogFormatter), typeof(TextFormatter) );
获取对象实例:
ILog log = (ILog)container["txtLog"];
二者是不是有几分相似呢?不知道Unity会给我们带来哪些惊喜?
结束语
在ASP.NET MVC Framework推出后引起了业界极大的讨论“MS MVC框架漩涡中的MonoRail未来”,不知道Unity推出之后会不会再出现一场“Unity漩涡中的Castle Windsor未来”或者“Unity漩涡中的Spring.Net未来”的讨论。不管怎么说,微软推出Unity,我们又多了一种可供选择的依赖注入容器。
参考:DIAB is now Unity
支持TerryLee的创业产品Worktile
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com
Worktile,新一代简单好用、体验极致的团队协同、项目管理工具,让你和你的团队随时随地一起工作。完全免费,现在就去了解一下吧。
https://worktile.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2006-01-16 .NET设计模式(7):创建型模式专题总结(Creational Pattern)
2006-01-16 .NET设计模式(6):原型模式(Prototype Pattern)