回到目录

之前的一篇Unity的文章主要是基本的实现,并没有什么特别的地方,使用Unity可以方便的实现应用程序的IoC控制反转,这给我们的应用程序在耦合度上变得高了,同时可测试性加强了,当然,这些的前提都是面向接口编程,如果你面向了具体实现去写程序,那你不用再看本篇文章了,呵呵。

本文章主要分享一下,通过Unity组件里的服务定位器ServiceLocator来实现批量加载类型,即你不用那它们一个个的配置到config文件里了,甚至在进行动态加载时,同时可以为它添加一些行为,如缓存,呵呵 !

下面说一下实现思想

首先unity有自己的容易UnityContainer,我们的配置信息都是向它里面添加的,它公开了RegisterType方法,用来向容器里注册类型和行为(aop),我们就是通过这个方法将应用程序的bin目录下的指定dll里的所有接口实现类进行提取,并添加到UnityContainer容器里,这样就实现了批量的动态的注册类型!

我的project.Ioc项目结构(来自仓储大叔框架集)

aaarticlea/png;base64,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" alt="" />

修改ServiceLocator文件的内容

添加了指定的私有方法来干这事

  1. /// <summary>
  2. /// 装载一批动态的类型
  3. /// Author:zhangzhanling
  4. /// Date:2015-04-03
  5. /// </summary>
  6. private void LoadDynamicType(IUnityContainer _container)
  7. {
  8. //unity动态类型注入,各个程序集用,分开,支持*通配符号
  9. string unityDynamicAssembly = System.Configuration.ConfigurationManager.AppSettings["unityDynamicAssembly"];
  10. //是否同时启动数据集缓存策略
  11. string unityCachingDoing = System.Configuration.ConfigurationManager.AppSettings["unityCachingDoing"];
  12. InjectionMember[] injectionMembers = null;
  13. if (unityCachingDoing == "")
  14. {
  15. injectionMembers = new InjectionMember[] { new Interceptor<InterfaceInterceptor>(), new InterceptionBehavior<Project.UnityCaching.CachingBehavior>() };
  16. }
  17. if (!string.IsNullOrWhiteSpace(unityDynamicAssembly))
  18. {
  19. Array.ForEach(unityDynamicAssembly.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), dllName =>
  20. {
  21. var baseDir = AppDomain.CurrentDomain.BaseDirectory;
  22. if (System.Web.HttpContext.Current != null)
  23. {
  24. baseDir += "bin";
  25. }
  26. var files = Directory.GetFiles(baseDir, dllName);
  27. var iTypes = new List<Type>();
  28. foreach (var file in files)
  29. {
  30. var interfaceASM = Assembly.LoadFrom(Path.Combine(baseDir, file));
  31. var types = from t in interfaceASM.GetTypes()
  32. where !string.IsNullOrWhiteSpace(t.Namespace)
  33. select t;
  34.  
  35. foreach (var type in types)
  36. {
  37. if (type.GetInterfaces() != null && type.GetInterfaces().Any())
  38. foreach (var father in type.GetInterfaces())
  39. {
  40. _container.RegisterType(father
  41. , type
  42. , injectionMembers);
  43. }
  44. }
  45. }
  46. });
  47.  
  48. }
  49.  
  50. }

ServiceLocator中调用它

aaarticlea/png;base64,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" alt="" />

大功告成了,哈哈!

回到目录

第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为的更多相关文章

  1. 微信小程序把玩(二十六)navigator组件

    原文:微信小程序把玩(二十六)navigator组件 navigator跳转分为两个状态一种是关闭当前页面一种是不关闭当前页面.用redirect属性指定. 主要属性: wxml <naviga ...

  2. 微信小程序把玩(十六)form组件

    原文:微信小程序把玩(十六)form组件 form表单组件 是提交form内的所有选中属性的值,注意每个form表单内的组件都必须有name属性指定否则提交不上去,button中的type两个subm ...

  3. [你必须知道的.NET]第二十六回:认识元数据和IL(下)

    发布日期:2009.03.04 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 书接上回: 第二十四回:认识元数据和IL(上), ...

  4. 我心中的核心组件(可插拔的AOP)~第六回 消息组件~续

    回到目录 上一回写消息组件已经是很久之前的事了,这一次准备把消息组件后续的东西说一下,事实上,第一篇文章主要讲的是发消息,而这一讲最要讲的是收消息,简单的说,就是消息到了服务器之后,如何从服务器实时的 ...

  5. 一起talk C栗子吧(第一百二十六回:C语言实例--statickeyword)

    各位看官们,大家好,上一回中咱们说的内置宏的样例.这一回咱们说的样例是:static关键字. 闲话休提.言归正转. 让我们一起talk C栗子吧! 看官们,C语言提供了static关键字.它常常出如今 ...

  6. Vue(二十六)父子组件通信

    今天写了一个分页公共组件,就出现了父子组件通信的问题,今天来总结下我遇到的父子组件通信问题 一.子组件调取父组件的数据或方法 (1)props 想要把父组件的值,传到子组件中,使用props 比如你在 ...

  7. Django(十六)Form组件扩展

    http://www.cnblogs.com/wupeiqi/articles/6144178.html Form组件 - form表单(验证:保留上次内容) - - Ajax(验证:无需上次内容) ...

  8. 一起talk C栗子吧(第九十六回:C语言实例--使用共享内存进行进程间通信二)

    各位看官们.大家好,上一回中咱们说的是使用共享内存进行进程间通信的样例,这一回咱们接着上一回内容继续说使用共享内存进行进程间通信. 闲话休提,言归正转.让我们一起talk C栗子吧! 我们在上一回中介 ...

  9. 我心中的核心组件(可插拔的AOP)~第十二回 IoC组件Unity

    回到目录 说在前 Ioc组件有很多,之前也介绍过autofac,castle等,今天再来说一下在微软Nlayer DDD架构里使用的unity组件,今天主要说一下依靠注入,如果希望看拦截的用法,可以阅 ...

随机推荐

  1. iOS开发中的各种错误

    提交iTunesconnect遇到的问题: 1. error itms-90179 Invalid Code Signing. 解决:发现是发布正式被撤销了,重新生成发布Certificates,重新 ...

  2. Yosemite 快速搭建 自带Apache+PHP5.6+MySQL 开发环境

    1.安装homebrew ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)" 2.安装h ...

  3. AngularJS之ng-options的best practise

    废话不多说,直接上代码. function MySelectCtrl($scope) { $scope.Model = [ { id: 10002, MainCategory: '男', Produc ...

  4. 自动挂载文件/etc/fstab功能详解

    今天看了这篇文章,对于自动挂载中的一些小细节和参数有了更深的理解,所以这次把它摘下来,留做查询 一./etc/fstab文件的作用 1.我们把磁盘手动挂载之后如果不把它写入/etc/fstab这个文件 ...

  5. Partial backup 备份指定表/库

    Partial Backups XtraBackup支持partial backups,这意味着你可以只备份部分表或库.要备份的表必须是独立表空间,即innodb_file_per_table=1 有 ...

  6. Java程序,求学员的平均成绩

    第一步,系统提示输入学员的人数. 第二步,逐一获取学员的分数,并累计. 第三步,求平均成绩,并输出. import java.util.Scanner; public class chengji { ...

  7. 算法入门笔记------------Day1

    1.C语言使用%d显示float值,不会把float值转换为近似的int值,而是显示垃圾值,使用%f显示int值,也不会把该int值转换为浮点值 2.三位数反转:输入一个三位数,分离它的百位,十位和个 ...

  8. 用户 'IIS APPPOOL\ASP.NET V4.0' 登录失败 解决办法…………

    在iis管理器中-->应用程序池-->ASP.NET V4.0---->高级设置-->标识-->改为localSystem

  9. 成功转移安卓手机QQ聊天记录

    废话先不说,直接上干货: 只要把两个地方的数据完整的复制到新手机对应位置就可以了,但过程相当坎坷: /data/data/com.tencent.mobileqq /sdcard/Tencent/Mo ...

  10. CUTE-WRV2.1+TCP core(COM5402)的TCP带宽测试

    问题的提出 测试TCP的带宽,硬件平台CUTE-WRV2.1,固件版本WRPCV3.0+COM5402. 代码.工具及实现 1. 在固件中,增加模块,收到TCP数据包后不断地往外发数: library ...