IOC框架之 Unity 入门

喜你入骨 提交于 2020-04-27 02:42:26

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

学无止境,精益求精

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

输出如下:

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

@陈卧龙的博客

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!