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

学无止境,精益求精

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 入门的更多相关文章

  1. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

    1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...

  2. IOC框架:Unity

    Unity 是一个轻量级.可扩展的依赖注入容器,支持构造函数.属性和方法调用注入. 在进行项目之前通过Nuget安装Unity 简单的例子 定义一个接口 namespace UnityTest { / ...

  3. .Net IOC框架入门之一 Unity

    一.概述 IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一 ...

  4. .Net IOC框架入门之——Unity

    一.概述 IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection). 作用:将各层的对象以松耦合的方式组织在一 ...

  5. IOC模式及Unity框架文章收藏

    1.IoC模式:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html 通过Unity实现IOC容器. 2.深入理解DIP.IoC.D ...

  6. MVC4 基于 Unity Ioc 框架的 ControllerFactory

    首先引入Untiy框架. 可以在NuGet程序包 管理器中直接安装. 新建 继承DefaultControllerFactory  的UnityControllerFactory: 重写虚方法GetC ...

  7. 今天研究Unity Ioc 框架

    今天研究Unity Ioc 框架,被自己坑了两个多小时. 运行就报错,反反复复检查了很多次,配置文件,代码都没有问题,也从新写了好几遍. 最后仔细看报错消息才知道,config文件没有生成到目录……… ...

  8. .Net IOC框架入门之三 Autofac

    一.简介   Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个 目的 1.依赖注入的目的是为了解耦. 2.不依赖于具体类,而依赖抽象类或者接口,这叫依赖倒置. 3.控制反转即 ...

  9. .Net IOC框架入门之——Autofac

    一.简介  Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个 目的 1.依赖注入的目的是为了解耦.2.不依赖于具体类,而依赖抽象类或者接口,这叫依赖倒置.3.控制反转即IoC ...

随机推荐

  1. Openlayer3之空间参考扩展

    Openlayers默认了两种空间参考,一个是EPSG4326,一个是EPSG3857,其它的空间参考需要进行扩展才能使用.所以我们初始化时进行了如下操作: 1.将配置数据库中所有的空间参考读取出来, ...

  2. 安卓开发_浅谈ListView之分页列表

    前言: 在开发的过程中,有时候我们需要从网络解析一些数据,比如最近的一些新闻,我们需要把这些数据用ListView显示出来. 因为是解析一个网络数据源,这样将会一下子将所有的数据解析出来,当数据源数据 ...

  3. 【Java入门提高篇】Day31 Java容器类详解(十三)TreeSet详解

    上一篇很水的介绍完了TreeMap,这一篇来看看更水的TreeSet. 本文将从以下几个角度进行展开: 1.TreeSet简介和使用栗子 2.TreeSet源码分析 本篇大约需食用10分钟,各位看官请 ...

  4. (网页)readonly和disabled的区别(转)

    转自脚本之家: 标签的readonly和disabled属性的区别: 在表单元素中,readonly和disable有类似之处,因为它们都可以将一些表单元素设置为"不可用"状态,当 ...

  5. (后端)NoSuchMethodError

    这个错误是说编译时有这个方法,但运行时没有了 请使用:mvn clean install

  6. html 知识整理

    一. 前言 本文全面介绍了html的定义.使用和具体常用标签. 参考资料:菜鸟教程 二.定义 html是HyperText Markup Language的简称,也就是超文本标记语言的缩写.通过htm ...

  7. mac上Android环境变量配置

    1.AndroidSDK路径查看 (1)AndroidStudio: 菜单栏AndroidStudio > Preferences > Appearences&Behavior & ...

  8. 安装.Net Framework 4.6.2时出现“无法建立到信任根颁发机构的证书链”解决方法

    在安装Microsoft .NET Framework 4.6.2脱机包时提示 无法建立到信任根颁发机构的证书链 实际上是要安装一个根证书.解决方案如下(因无法贴链接,可百度搜索“mamicode.c ...

  9. elasticsearch使用bulk实现批量操作

    本篇文章提供ES原生批量操作语法及使用bulk批量操作文档.文章依旧提供语法,具体实现大家根据语法,在对应处进行替换即可 一.原生批量获取文档 1.获取指定文档值(1) 语法: GET /_mget ...

  10. mysqldump与innobackupex备份过程你知多少

    mysqldump与innobackupex备份过程你知多少 测试库表创建(这里在同一个库下创建两个表,一个表为innodb引擎,一个为myisam引擎) root@localhost : (none ...