zoukankan      html  css  js  c++  java
  • Unity Container

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

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

    QQ截图20131208221557

    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节中不同的方式对类型进行解析1

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

  • 相关阅读:
    微信小程序UI自动化: minium文档部署02
    微信小程序UI自动化: 选择工具/框架01
    gitalb学习:02gitlab runner安装
    gitlab学习: 01安装gitlab
    01.Python中一切皆对象
    Prometheus+Noe Expoter+Grafana:资源监控初体验(基于cenots7,没使用docker)
    01. 判断三角形的函数
    Locust性能测试:上手初体验
    史上最全的邮箱测试方法!
    使用 Python 处理非对称加密,竟然如此简单
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3464430.html
Copyright © 2011-2022 走看看