您的位置:首页 > 移动开发 > Unity3D

Unity又称Unity Application Block

2016-07-18 20:44 483 查看
本文关注以下方面(环境为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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: