发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
本文关注以下方面(环境为VS2012、.Net Framework 4.5以及Unity 3):
一、Ioc/DI简介
IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详细的说明可参见大牛Martin Fowler的强文 http:///articles/injection.html,借用Hollywood的名言:Don't call us, we'll call you,意即你呆着别动,到时我会找你。控制反转的核心是控制权的转移,从原有的应用程序转移到框架如IoC容器,从而实现模块间的解耦。
Unity又称Unity Application Block,是微软P&P团队开发的一个轻量级、可扩展的依赖注入容器。它有助于构建松耦合的应用程序和为开发者提供以下便利:
关于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>
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
利用Attribute简化Unity框架IOC注入
利用Attribute简化Unity框架IOC注入。IOC框架一般基于容器,在容器中存储着各个抽象和具体实现的依赖关系,当我们需要发出请求的时候,IOC框架会在当前容器中找到我们所需要的具体实现返回给我们,当然...
使用Unity实现 AOP
使用Unity实现 AOP.Unity.dll.Unity.14: type="Microsoft.Practices.Unity.InterceptionExtension.TransparentProxyInterceptor, M...
Microsoft Enterprise Library 5.0 系列教程(十) Configuration Application Block
添加引用:-->using System.Configuration;using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;using Microsoft.Prac...
The magical moment when container load balancing meets service discovery | Rancher Labs
Configure this service to specify your source/target ports, but instead of pointing it to a container, as we did last time, we...
StructureMap
StructureMap.public interface IBar { } public class Bar : IBar { } public interface IFoo { } public class Foo : IFoo { public IBar Bar { get;} public Foo(IBar bar) { Bar = bar;While Struc...
Prism学习(2)---初识Unity
Prism学习(2)---初识Unity.Prism中提供了两种框架用于实现这种解藕,分别是Unity和MEF。下面将使用Unity来实现初步的解藕,这将为使用Prism进行彻底的解藕创造条件。一,在Application项目中添加Prism...
就Unity使用有感
就Unity使用有感。将容器 BuildUp 需要注意的是ImplService接口必须加上[Dependency]这样才能实现注入,不然ImplService一直会报空指针异常。bool UserLogin(string uname, string password);--> pu...
InfoQ: Microsoft Unity Dependency Injection A...
Microsoft Unity Dependency Injection Application Block Released.The Microsoft patterns &practices group has released its Dependency Injection container called Unity or the Unity Appli...
实操UNITY3D接入91SDK安卓版
我的操作过程是:MAC系统的是在应用程序->UNTITY文件夹->UNITY->右键:显示包内容->CONTENTS文件夹->PLAYBACKENGINES文...
微信扫码,在手机上查看选中内容