Unity 3(一):简介与示例
本文关注以下方面(环境为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>
再次运行,一切正常
Unity 3(一):简介与示例的更多相关文章
- Android查缺补漏(IPC篇)-- 进程间通讯之Socket简介及示例
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8425736.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...
- IdentityServer4 中文文档 -6- (简介)示例服务器和测试
IdentityServer4 中文文档 -6- (简介)示例服务器和测试 原文:http://docs.identityserver.io/en/release/intro/test.html 目 ...
- Ruby简介,附带示例程序
Ruby语言是日本人松本行弘于1993年器开始着手研发,经历2年时间,发布了Ruby语言的第一个版本:0.95版. Ruby是一种非常简介的解释性语言,一种纯粹的面向对象编程语言,甚至比Jav ...
- Unity容器中AOP应用示例程序
转发请注明出处:https://www.cnblogs.com/zhiyong-ITNote/p/9127001.html 实在没有找到Unity容器的AOP应用程序示例的说明,在微软官网找到了教程( ...
- IText简介及示例
一.iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...
- Unity Standard Assets 简介之 其他资源
还有一些其他资源包,要不就是已经有Unity官方的介绍了,要不就是以资源为主没有多少脚本,最后集中说明一下. Effects资源包:包含各种图像特效,Unity官方文档地址 http://docs.u ...
- JavaScript简介及示例
JavaScript简介及使用 一.简介 JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛 ...
- Unity Standard Assets 简介之 Utility
决定写这个系列起因于刚才的偶然所见,我发现当前版本的Unity有一个 Utility 标准资源包,里面有一个 FPSCounter 脚本提供了显示游戏运行帧率的基本功能,而我几周前刚刚写过一个同样功能 ...
- Lambda表达式 简介 语法 示例
Lambda 表达式也称为闭包,是匿名类的简短形式.Lambda 表达式简化了[单一抽象方法声明接口]的使用,因此 lambda 表达式也称为功能接口. 在 Java SE 7 中,单一方法接口可使用 ...
随机推荐
- js全端
js是世界上最好的语言之一,或许可以不用加之一 我是个js游戏前端开发者,但是我不局限于只是开发h5游戏,微信小游戏... js很强大很强大很强大,没有哪种语言能通吃,除了js. 网页, app, 服 ...
- Qt中 QString 转 char*
Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...
- struts下载文件
- Linux下如何确认磁盘是否为SSD
方法 法1:通过查看/sys/block/sda/queue/rotational 通过cat /sys/block/sda/queue/rotational进行查看,返回值0即为SSD:返回1即为H ...
- Netty基础系列(3) --彻底理解NIO
前言 上一节中我们提到了同步异步与阻塞非阻塞的区别,知道了同步并不等于阻塞.而本节的主角NIO是一种同步非阻塞的I/O模型,并且是I/O多路复用模型.NIO在java中被称为 New I/O.它并不能 ...
- ReentrantLock详解 以及与synchronized的区别
ReentrantLock lock = new ReentrantLock(); //参数默认false,不公平锁 ReentrantLock lock = new ReentrantLock(tr ...
- 【BZOJ3622】已经没有什么好害怕的了(动态规划,容斥)
[BZOJ3622]已经没有什么好害怕的了(动态规划,容斥) 题面 BZOJ 题解 很明显的,这类问题是要从至少变成恰好的过程,直接容斥即可. 首先我们要求的是(糖果>药片)=(药片>糖果 ...
- 【hdu4010】 Query on The Trees
http://acm.hdu.edu.cn/showproblem.php?pid=4010 (题目链接) 题意 link cut tree板子 Solution link cut tree 细节 注 ...
- STL中的优先级队列priority_queue
priority_queue(queue类似)完全以底部容器为根据,再加上二叉堆(大根堆或者小根堆)的实现原理,所以其实现非常简单,缺省情况下priority_queue以vector作为底部容器.另 ...
- jQuery读取KindEditor的值
$(document.getElementsByTagName("iframe")[0].contentWindow.document.body).html();