Unity又称Unity Application Block
本文关注以下方面(环境为VS2012、.Net Framework 4.5以及Unity 3):
- Ioc/DI简介;
- Unity简单示例
一、Ioc/DI简介
IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详细的说明可参见大牛Martin Fowler的强文 http://martinfowler.com/articles/injection.html,借用Hollywood的名言:Don't call us, we'll call you,意即你呆着别动,到时我会找你。控制反转的核心是控制权的转移,从原有的应用程序转移到框架如IoC容器,从而实现模块间的解耦。
Unity又称Unity Application Block,是微软P&P团队开发的一个轻量级、可扩展的依赖注入容器。它有助于构建松耦合的应用程序和为开发者提供以下便利:
- 简化对象的创建,特别在分层对象结构和依赖的情形下
- 它支持需求的抽象化,这允许开发人员在运行时或在配置文件中指定依赖,简化横切关注点(crosscutting concerns)的管理
- 它通过把组件配置推给容器来决定,增加了灵活性
- 服务定位能力; 这使客户端能够存储或缓存容器
关于Unity的详细介绍可移步微软官网 http://msdn.microsoft.com/en-us/library/dn170416.aspx
二、Unity简单示例
以Log日志为例
首先,简单定义日志接口

namespace PCT.Unity.ConsoleAppSample
{
interface ILog
{
void Log(string message);
}
}

控制台日志实现类

namespace PCT.Unity.ConsoleAppSample
{
class ConsoleLog : ILog
{
public void Log(string message)
{
Console.WriteLine(message);
}
}
}

添加Unity引用
在搜索框中输入Unity
点击Install即可完成安装。
注册(Register)和使用(Resolve)代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity; namespace PCT.Unity.ConsoleAppSample
{
class Program
{
static void Main(string[] args)
{
//Register
var container = new UnityContainer();
container.RegisterType<ILog, ConsoleLog>(); var logger = container.Resolve<ILog>();
logger.Log("Hello, Unity Application Block"); Console.ReadKey();
}
}
}

运行效果如下:
三、Unity配置文件示例
代码container.RegisterType<ILog, ConsoleLog>()改成container.LoadConfiguration()即可,当然要包含Microsoft.Practices.Unity.Configuration命名空间,完整的代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration; namespace PCT.Unity.ConsoleAppSample
{
class Program
{
static void Main(string[] args)
{
//Register
var container = new UnityContainer();
//container.RegisterType<ILog, ConsoleLog>();
container.LoadConfiguration(); var logger = container.Resolve<ILog>();
logger.Log("Hello, Unity Application Block"); Console.ReadKey();
}
}
}

修改配置文件如下

<?xml version="1.0"?>
<configuration> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup> <configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections> <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<assembly name="PCT.Unity.ConsoleAppSample" />
<namespace name="PCT.Unity.ConsoleAppSample" />
<container>
<register type="ILog" mapTo="ConsoleLog" />
</container>
</unity> </configuration>

运行,发现如下错误
不解,Google之发现configSections节点应该放在第一个位置,其它节点无所谓顺序。

<?xml version="1.0"?>
<configuration> <configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections> <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<assembly name="PCT.Unity.ConsoleAppSample" />
<namespace name="PCT.Unity.ConsoleAppSample" />
<container>
<register type="ILog" mapTo="ConsoleLog" />
</container>
</unity> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup> </configuration>

再次运行,一切正常
转自:http://www.cnblogs.com/panchunting/p/Unity_Sample.html
Unity又称Unity Application Block的更多相关文章
- Enterprise Library - Data Access Application Block 6.0.1304
Enterprise Library - Data Access Application Block 6.0.1304 企业库,数据访问应用程序块 6.0.1304 企业库的数据访问应用程序块的任务简 ...
- Enterprise Library 6——Using the Logging Application Block
原文参考 http://msdn.microsoft.com/en-us/library/dn440731(v=pandp.60).aspx 一.简介 .更重要的是用于审计.这种日志可以跟踪用户的行为 ...
- Ubuntu 11.10 安装GMONE3,卸载 UNITY和UNITY 2D
Ubuntu 11.10安装GNOME3: 1)sudo apt-get install gnome-shell sudo apt-get install gnome-themes* (或者 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block 开发人员经常编写需要安全功能的应用程序.这些应用程序 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block 使用企业库异常处理应用程序模块的 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图: 从上图我们可以 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级)
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级) 企业库验证应用程序模块之配置文件模式: ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级)
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级) 企业库提供了一个很强大的验证应用程序模 ...
随机推荐
- MikroTik RB750r2/RB750gr3 操作记录
1. 客户端的下载 http://www.mikrotik.com/download 下载 winbox 2. Reset重置密码的正确姿势 http://wiki.mikrotik.com/ind ...
- TaskMapper
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...
- iOS开发-Objective-C Block的实现方式
前言:我们可以把Block当作一个闭包函数,它可以访问外部变量和局部变量,但默认是不可以修改外部变量.你可以使用它来做回调方法,比起使用代理(Delegate)会更加直观.顺带一提,苹果很多的接口(A ...
- iOS GCD中级篇 - dispatch_group的理解及使用
上一篇GCD基础篇,以及同步.异步,并发.并行几个概率的理解 关于dispatch_group的概念以及几种场景下的使用 1.关于dispatch_group 把一组任务提交到队列中,这些队列可以不相 ...
- 【LeetCode】149. Max Points on a Line
Max Points on a Line Given n points on a 2D plane, find the maximum number of points that lie on the ...
- 房产地图google map的初步应用点滴.4)(转)
房产地图google map的初步应用点滴.1) 房产地图google map的初步应用点滴.2) 房产地图google map的初步应用点滴.3) 房产地图google map的初步应用点滴.4) ...
- wap站、手机APP 接入支付宝、微信、银联支付。
一.wap站 ①.支付宝接入 1.开发前准备:申请一个通过实名认证的企业支付宝账号,并申请开通手机WAP支付功能. 2.流程 参数准备: 企业支付宝账号的PID(也叫ParnerID)和KEY,如果使 ...
- Android清空Fragment回退栈
啊= =:国内的资料为什么都是抄来抄去的. 最后上了Stack Overflow才找到了正解. FragmentManager fragmentManager = getFragmentManager ...
- TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE
TransactionScope事务处理方法介绍及.NET Core中的注意事项 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...
- PS_Form个性化标准LOV的替换和数据源追溯分析(案例)
2014-06-01 BaoXinJian