Unity Container中的几种注册方式与示例

1.实例注册

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

有以下的实际类型:html

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方法对这个类型进行解析和调用:this

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);

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

QQ截图20131208221557

2.简单类型注册

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

接口定义code

namespace ConsoleSample
{
    public interface IFuckUp
    {
        int IncreaseFlag();
    }
}

类型定义htm

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<>方法对类型进行解析:blog

 
IFuckUp fuckUp1 = container.Resolve<IFuckUp>();
Console.WriteLine(fuckUp1.IncreaseFlag());
IFuckUp fuckUp2 = container.Resolve<IFuckUp>();
Console.WriteLine(fuckUp2.IncreaseFlag());
经过调用结果能够看出,这次解析两个类型时为建立的两个新的对象,咱们使用了在1节中不一样的方式对类型进行解析 1

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

相关文章
相关标签/搜索