IOC框架之 Unity 入门
十年河东,十年河西,莫欺少年穷
学无止境,精益求精
Unity是什么?
Unity是patterns & practices团队开发的一个轻量级、可扩展的依赖注入容器,具有如下的特性:
1. 它提供了创建(或者装配)对象实例的机制,而这些对象实例可能还包含了其它被依赖的对象实例。
2. Unity允许将预先配置的对象注入到类中,实现了inversion of control (IoC)的功能。在Unity中,支持constructor injection(构造器注入), property setter injection(属性设值注入)以及method call injection(方法注入)。ps:这里的方法注入与Martin Fowler定义的接口注入类似而稍有区别。
3. 支持容器的体系结构。一个容器可以有子容器,允许从子容器到父容器的对象定位查询。
4. 可以通过配置文件进行准备和配置容器。
5. 不会影响到类的定义(属性设值注入和方法注入除外),这也是轻量级容器的一个体现。
6. 支持自定义的容器扩展。
使用Unity,最基本步骤有三步。
1. 建立容器;
2. 将接口与类的映射注册到容器中;
3. 从容器中解析出正确的对象。
为了接下来的说明,我们先编写几个后面需要的接口和类:
准备工作:ILogger 接口
public interface ILogger { void Log(string msg); }
继承上述接口的子类
public class DBLogger : ILogger { public void Log(string msg) { Console.WriteLine("数据库记录消息为:" + msg); } }
及
public class FileLogger : ILogger { public void Log(string msg) { Console.WriteLine("日志文件记录消息为:" + msg); } }
Step1. 创建对象容器
在Unity中创建容器实例最简单的方法是直接使用构造函数创建,如下代码所示:
IUnityContainer container = new UnityContainer();
Step2. 注册接口映射
在Unity中提供了一组Register方法供我们在容器中注册接口映射,如下代码所示:
container.RegisterType<ILogger, DBLogger>();
Step3. 获取对象实例
在Unity中提供了一组Resolve方法用以获取对象实例,如下代码所示:
var logger = container.Resolve<ILogger>();
OK,就这么简单!
测试如下:
class Program { static void Main(string[] args) { // IUnityContainer container = new UnityContainer(); container.RegisterType<ILogger, DBLogger>(); var logger = container.Resolve<ILogger>(); logger.Log("孙行者:看我72变"); // container.RegisterType<ILogger, FileLogger>(); logger = container.Resolve<ILogger>(); logger.Log("二郎神:看我73变"); Console.ReadKey(); } }
输出如下:
简单的入门,不作过多阐述,
@陈卧龙的博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2017-05-16 C#中out和ref之间的区别