您的位置:首页 > 移动开发 > Unity3D

Unity Container

2013-12-08 23:07 393 查看

UnityContainer中的几种注册方式与示例

2013-12-0822:43by小白哥哥,22阅读,0评论,收藏,编辑

1.实例注册

最简单的注册方式就是实例注册,Unity容器负责维护对一个类型的单例引用,比如:

有如下的实际类型:

namespaceConsoleSample
{
publicclassSampleClass
{
publicintReferenceCount{get;set;}

publicvoidIncrease()
{
this.ReferenceCount++;
}
}
}

使用UnityContainer的RegisterInstance方法对这个类型进行实例注册:

varcontainer=newUnityContainer();
SampleClasssampleClass=newSampleClass();
container.RegisterInstance(sampleClass);


而后,我们可以使用UnityContainer的Resolve方法对这个类型进行解析和调用:

SampleClassresolvedSampleClass1=(SampleClass)container.Resolve(typeof(SampleClass));
resolvedSampleClass1.Increase();
Console.WriteLine(resolvedSampleClass1.ReferenceCount);
SampleClassresolvedSampleClass2=(SampleClass)container.Resolve(typeof(SampleClass));
resolvedSampleClass2.Increase();
Console.WriteLine(resolvedSampleClass2.ReferenceCount);


查看调用的结果,可以发现这里解析并调用的实同一个类的实例:





2.简单类型注册

更常见的类型注册是映射借口与实际类型,有如下接口与实现接口的类型:

接口定义

namespaceConsoleSample
{
publicinterfaceIFuckUp
{
intIncreaseFlag();
}
}


类型定义

namespaceConsoleSample
{
publicclassFuckUp
{
privateintflag=0;

publicintIncreaseFlag()
{
flag++;
returnflag;
}
}
}


可以使用RegisterType<>方法对这个接口和实现类型进行映射:

varcontainer=newUnityContainer();
container.RegisterType<IFuckUp,FuckUp>();


而后使用Resolve<>方法对类型进行解析:


IFuckUpfuckUp1=container.Resolve<IFuckUp>();
Console.WriteLine(fuckUp1.IncreaseFlag());
IFuckUpfuckUp2=container.Resolve<IFuckUp>();
Console.WriteLine(fuckUp2.IncreaseFlag());

通过调用结果可以看出,此次解析两个类型时为创建的两个新的对象,我们使用了在1节中不同的方式对类型进行解析


看来又是一篇简单的笔记,快十一点要去锻炼身体了,下一篇写构造函数注入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: