注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

.NET Unity IOC框架使用实例  

2017-07-24 18:40:58|  分类: IOC |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

转自:http://blog.csdn.net/chen_peng7/article/details/54896449

1.IOC简介

IOC(Inversion of Control), 控制反转

DI (Dependency Injection),依赖注入

IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。

2.Unity引入


3.创建单例模式容器类

[csharp] view plain copy
  1. using Microsoft.Practices.Unity;  
  2. using Microsoft.Practices.Unity.Configuration;  
  3. using System;  
  4. using System.Collections.Generic;  
  5. using System.Configuration;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Threading.Tasks;  
  9.   
  10. namespace UnityIocTest  
  11. {  
  12.     /// <summary>  
  13.     /// Unity IOC单例模式   
  14.     /// </summary>  
  15.     public class UnitySingleton  
  16.     {  
  17.         //单例  
  18.         private static UnitySingleton instance;  
  19.   
  20.         //ioc容器  
  21.         public IUnityContainer container;  
  22.   
  23.         //获取单例  
  24.         public static UnitySingleton getInstance()  
  25.         {  
  26.             if (instance == null || instance.container == null)  
  27.             {  
  28.                 string configFile = "Unity.config";  
  29.                 var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configFile };  
  30.                 //从config文件中读取配置信息  
  31.                 Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);  
  32.                 //获取指定名称的配置节  
  33.                 UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection("unity");  
  34.                 instance = new UnitySingleton()  
  35.                 {  
  36.                     //container = new UnityContainer().LoadConfiguration((UnityConfigurationSection)ConfigurationManager.GetSection("unity"), "MyContainer")  
  37.                     container = new UnityContainer().LoadConfiguration(section, "MyContainer")  
  38.                     //container = new UnityContainer()  
  39.                 };  
  40.                 //instance.container.RegisterType<IExampleClass, ExampleClass>();  
  41.             }  
  42.             return instance;  
  43.         }  
  44.   
  45.         //IOC注入实体  
  46.         public static T GetInstanceDAL<T>()  
  47.         {  
  48.             return getInstance().container.Resolve<T>();  
  49.         }  
  50.     }  
  51. }  
此处是将Unity config配置单独成一个文件,方便管理。

4.添加IOC相关类

接口类

[csharp] view plain copy
  1. public interface IExampleClass  
  2. {  
  3.     void DoHelloWord();  
  4. }  
具体实现类

[csharp] view plain copy
  1. public class ExampleClass : IExampleClass  
  2. {  
  3.     public void DoHelloWord()  
  4.     {  
  5.         Console.WriteLine("Hello Word!");  
  6.     }  
  7. }  

实现类扩展
[csharp] view plain copy
  1. public class DIExampleClass  
  2. {  
  3.     //属性注入  
  4.     [Dependency]  
  5.     public IExampleClass example { getset; }  
  6.       
  7.     private IExampleClass testInject;  
  8.   
  9.     public void DoWork()  
  10.     {  
  11.         example.DoHelloWord();  
  12.         testInject.DoHelloWord();  
  13.     }  
  14.   
  15.     //方法注入  
  16.     [InjectionMethod]  
  17.     public void Initialize(IExampleClass instance)  
  18.     {  
  19.         testInject = instance;  
  20.     }  
  21. }  

5.添加配置文件Unity.config

[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <configuration>  
  3.   <configSections>  
  4.     <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" />  
  5.   </configSections>  
  6.   <unity>  
  7.     <!--定义类型别名-->  
  8.     <aliases>  
  9.       <add alias="IExampleClass" type="UnityIocTest.IExampleClass,UnityIocTest" />  
  10.       <add alias="ExampleClass" type="UnityIocTest.ExampleClass,UnityIocTest" />  
  11.     </aliases>  
  12.     <!--容器-->  
  13.     <container name="MyContainer">  
  14.       <!--映射关系-->  
  15.       <!--<register type="IExampleClass"  mapTo="ExampleClass"></register>-->  
  16.       <register type="UnityIocTest.IExampleClass,UnityIocTest"  mapTo="UnityIocTest.ExampleClass,UnityIocTest"></register>  
  17.     </container>  
  18.   </unity>  
  19. </configuration>  

6.函数调用

[csharp] view plain copy
  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         //var dao = UnitySingleton.GetInstanceDAL<IExampleClass>();  
  6.         var dao = UnitySingleton.GetInstanceDAL<DIExampleClass>();  
  7.         dao.DoWork();  
  8.         Console.ReadLine();  
  9.     }  
  10. }  

7.结果显示

Hello Word!

Hello Word!

  评论这张
 
阅读(9)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017