zoukankan      html  css  js  c++  java
  • 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();
            }
        }

    输出如下:

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

    @陈卧龙的博客

  • 相关阅读:
    spark-env.sh增加HADOOP_CONF_DIR使得spark运行文件是hdfs文件
    spark wordcount程序
    hive内表和外表的创建、载入数据、区别
    select下拉框,二次定位
    Linux基本命令
    用户信息添加数据库
    MySQL查询语句练习
    mysql数据库、数据表、数据基本操作
    图像人脸检测(框出人脸、笑脸、眼睛)
    collections模块
  • 原文地址:https://www.cnblogs.com/chenwolong/p/Unity.html
Copyright © 2011-2022 走看看