博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOC框架之 Unity 入门
阅读量:5995 次
发布时间:2019-06-20

本文共 1805 字,大约阅读时间需要 6 分钟。

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

学无止境,精益求精

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

Step3. 获取对象实例

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

var logger = container.Resolve
();

OK,就这么简单!

测试如下:

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

输出如下:

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

@陈卧龙的博客

转载地址:http://gcqlx.baihongyu.com/

你可能感兴趣的文章
Codeigniter 利用加密Key(密钥)的对象注入漏洞
查看>>
【转】Android 二维码 生成和识别(附Demo源码)--不错
查看>>
adb shell dumpsys 命令 查看内存
查看>>
android 自定义命名空间
查看>>
apache和nginx支持SSI配置
查看>>
--@angularJS--一个最简单的指令demo
查看>>
Qt resizeEvent 控件居中设置
查看>>
深入理解spring中的各种注解(转)
查看>>
BootStrap安装
查看>>
ng-class的使用
查看>>
设计模式之建造者模式
查看>>
关于华为交换机bpdu enable. ntdp enable. ndp enable解析
查看>>
当你学不进去的时候,试试“普瑞马法则”
查看>>
编写DLL
查看>>
2015年第12本(英文第8本):the Old Man and the Sea 老人与海
查看>>
推荐系统中常用算法 以及优点缺点对比
查看>>
JSTL实现int数据的类型的长度
查看>>
cocos2d-x v3.2环境配置(现在3.x版本号可以配置该)
查看>>
InputStream中read()与read(byte[] b)
查看>>
第3章 结构之法——电话号码对应英语单词
查看>>