Unity Container中的几种注册方式与示例1.实例注册2.简单类型注册

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我叫刘半仙

原荐Spring AOP是什么?你都拿它做什么?

         对于最近博主最近写博客的兴致大发,我也在思考:为什么而写博客?在互联网时代,无论你是牛人大咖,还是小白菜鸟,都有发表自己看法的权利。无论你是对...

2854
来自专栏MYSQL轻松学

MySQL Innodb MTR源码解析

最近看了下Mysql innodb源码MTR模块,了解源码能帮助DBA更熟悉数据库运行原理、更容易定位排查问题。那么什么是Mtr?Mtr究竟是用来做什么的?围绕...

3626
来自专栏日常分享

Java Web Action DAO Service层次理解

参考来源:http://blog.csdn.net/inter_peng/article/details/41021727

812
来自专栏大内老A

为什么GAC和VS引用的程序集不一致?

我们知道VS开发中引用的程序集和运行时的程序集来源于不同的地方,前者来源于%ProgramFiles%\Reference Assemblies\Microso...

1767
来自专栏菜鸟致敬

一分钟带你读懂Python中的三类特殊方法

在Python中有着三类特殊方法:静态方法、类方法以及抽象方法。今天我们来谈谈其中的这三类特殊方法。

432
来自专栏海说

Servlet/JSP

Servlet/JSP为Java EE中接收、转发、响应客户端请求的的技术,是基于Web容器所提供的服务。 Servlet与JSP关系 Servlet是使用Ja...

1720
来自专栏H2Cloud

Boost ASIO proactor 浅析

Boost ASIO proactor 浅析 前情提要: Boost asio 的socket的异步非阻塞模式才有的是proactor模式,当IO操作介绍后回调...

3806
来自专栏java一日一条

Java 多线程之内置锁与显示锁

Java中具有通过Synchronized实现的内置锁,和ReentrantLock实现的显示锁,这两种锁各有各的好处,算是互有补充,今天就来做一个总结。

693
来自专栏技术小讲堂

探寻ASP.NET MVC鲜为人知的奥秘(2):与Entity Framework配合,让异步贯穿始终

Why 在应用程序,尤其是互联网应用程序中,性能一直是很多大型网站的困扰,由于Web2.0时代的到来,人们更多的把应用程序从C/S结构迁移到B/S结构,这样会带...

2907
来自专栏一“技”之长

iOS网络编程之六——数据缓存类NSURLCache使用解析

        在前面博客中,介绍了NSURLRequest请求类的相关使用方法,其中有介绍关于请求返回数据的缓存策略,实际上,iOS中具体缓存操作的管理是由N...

542

扫描关注云+社区