Unity Container中的几种注册方式与示例
2013-12-08 22:43 by 小白哥哥, 22 阅读, 0 评论, 收藏, 编辑
1.实例注册
最简单的注册方式就是实例注册,Unity 容器负责维护对一个类型的单例引用,比如:
有如下的实际类型:
namespace ConsoleSample { public class SampleClass { public int ReferenceCount { get; set; } public void Increase() { this.ReferenceCount++; } } }
使用UnityContainer的RegisterInstance方法对这个类型进行实例注册:
var container = new UnityContainer(); SampleClass sampleClass = new SampleClass(); container.RegisterInstance(sampleClass);
而后,我们可以使用UnityContainer的Resolve方法对这个类型进行解析和调用:
SampleClass resolvedSampleClass1 = (SampleClass)container.Resolve(typeof(SampleClass)); resolvedSampleClass1.Increase(); Console.WriteLine(resolvedSampleClass1.ReferenceCount); SampleClass resolvedSampleClass2 = (SampleClass)container.Resolve(typeof(SampleClass)); resolvedSampleClass2.Increase(); Console.WriteLine(resolvedSampleClass2.ReferenceCount);
查看调用的结果,可以发现这里解析并调用的实同一个类的实例:
2.简单类型注册
更常见的类型注册是映射借口与实际类型,有如下接口与实现接口的类型:
接口定义
namespace ConsoleSample { public interface IFuckUp { int IncreaseFlag(); } }
类型定义
namespace ConsoleSample { public class FuckUp { private int flag = 0; public int IncreaseFlag() { flag++; return flag; } } }
可以使用RegisterType<>方法对这个接口和实现类型进行映射:
var container = new UnityContainer();
container.RegisterType<IFuckUp, FuckUp>();
而后使用Resolve<>方法对类型进行解析:
IFuckUp fuckUp1 = container.Resolve<IFuckUp>(); Console.WriteLine(fuckUp1.IncreaseFlag()); IFuckUp fuckUp2 = container.Resolve<IFuckUp>(); Console.WriteLine(fuckUp2.IncreaseFlag());通过调用结果可以看出,此次解析两个类型时为创建的两个新的对象,我们使用了在1节中不同的方式对类型进行解析

看来又是一篇简单的笔记,快十一点要去锻炼身体了,下一篇写构造函数注入