IOC框架之 Unity 入门

Posted 天才第一步,雀氏纸尿布

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOC框架之 Unity 入门相关的知识,希望对你有一定的参考价值。

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

Unity是什么?

Unity是patterns & practices团队开发的一个轻量级、可扩展的依赖注入容器,具有如下的特性:

1. 它提供了创建(或者装配)对象实例的机制,而这些对象实例可能还包含了其它被依赖的对象实例。

2. Unity允许将预先配置的对象注入到类中,实现了inversion of control (IoC)的功能。在Unity中,支持constructor injection(构造器注入), property setter injection(属性设值注入)以及method call injection(方法注入)。ps:这里的方法注入与Martin Fowler定义的接口注入类似而稍有区别。

3. 支持容器的体系结构。一个容器可以有子容器,允许从子容器到父容器的对象定位查询。

4. 可以通过配置文件进行准备和配置容器。

5. 不会影响到类的定义(属性设值注入和方法注入除外),这也是轻量级容器的一个体现。

6. 支持自定义的容器扩展。

使用Unity,最基本步骤有三步。

1. 建立容器;

2. 将接口与类的映射注册到容器中;

3. 从容器中解析出正确的对象。

为了接下来的说明,我们先编写几个后面需要的接口和类:

准备工作:ILogger 接口

    public interface ILogger
    {
        void Log(string msg);
    }

继承上述接口的子类

    public class DBLogger : ILogger
    {
        public void Log(string msg)
        {
            Console.WriteLine("数据库记录消息为:" + msg);
        }
    }

    public class FileLogger : ILogger
    {
        public void Log(string msg)
        {
            Console.WriteLine("日志文件记录消息为:" + msg);
        }
    }

Step1. 创建对象容器

在Unity中创建容器实例最简单的方法是直接使用构造函数创建,如下代码所示:

IUnityContainer container = new UnityContainer();

Step2. 注册接口映射

在Unity中提供了一组Register方法供我们在容器中注册接口映射,如下代码所示:

 container.RegisterType<ILogger, DBLogger>();

Step3. 获取对象实例

在Unity中提供了一组Resolve方法用以获取对象实例,如下代码所示:

var logger = container.Resolve<ILogger>();

OK,就这么简单!

测试如下:

    class Program
    {
        static void Main(string[] args)
        {
            //
            IUnityContainer container = new UnityContainer();
            container.RegisterType<ILogger, DBLogger>();
            var logger = container.Resolve<ILogger>();
            logger.Log("孙行者:看我72变");
            //
            container.RegisterType<ILogger, FileLogger>();
            logger = container.Resolve<ILogger>();
            logger.Log("二郎神:看我73变");
            Console.ReadKey();
        }
    }

输出如下:

简单的入门,不作过多阐述,

@陈卧龙的博客

以上是关于IOC框架之 Unity 入门的主要内容,如果未能解决你的问题,请参考以下文章

IOC轻量级框架之Unity

.Net IOC框架入门之——Autofac

Spring框架的IOC之注解方式的快速入门

白话系列之IOC,三个类实现简单的Ioc

Unity IOC框架使用实例

IOC框架之AutoFac简介