第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为
之前的一篇Unity的文章主要是基本的实现,并没有什么特别的地方,使用Unity可以方便的实现应用程序的IoC控制反转,这给我们的应用程序在耦合度上变得高了,同时可测试性加强了,当然,这些的前提都是面向接口编程,如果你面向了具体实现去写程序,那你不用再看本篇文章了,呵呵。
本文章主要分享一下,通过Unity组件里的服务定位器ServiceLocator来实现批量加载类型,即你不用那它们一个个的配置到config文件里了,甚至在进行动态加载时,同时可以为它添加一些行为,如缓存,呵呵 !
下面说一下实现思想
首先unity有自己的容易UnityContainer,我们的配置信息都是向它里面添加的,它公开了RegisterType方法,用来向容器里注册类型和行为(aop),我们就是通过这个方法将应用程序的bin目录下的指定dll里的所有接口实现类进行提取,并添加到UnityContainer容器里,这样就实现了批量的动态的注册类型!
我的project.Ioc项目结构(来自仓储大叔框架集)
aaarticlea/png;base64,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" alt="" />
修改ServiceLocator文件的内容
添加了指定的私有方法来干这事
/// <summary>
/// 装载一批动态的类型
/// Author:zhangzhanling
/// Date:2015-04-03
/// </summary>
private void LoadDynamicType(IUnityContainer _container)
{
//unity动态类型注入,各个程序集用,分开,支持*通配符号
string unityDynamicAssembly = System.Configuration.ConfigurationManager.AppSettings["unityDynamicAssembly"];
//是否同时启动数据集缓存策略
string unityCachingDoing = System.Configuration.ConfigurationManager.AppSettings["unityCachingDoing"];
InjectionMember[] injectionMembers = null;
if (unityCachingDoing == "")
{
injectionMembers = new InjectionMember[] { new Interceptor<InterfaceInterceptor>(), new InterceptionBehavior<Project.UnityCaching.CachingBehavior>() };
}
if (!string.IsNullOrWhiteSpace(unityDynamicAssembly))
{
Array.ForEach(unityDynamicAssembly.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), dllName =>
{
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
if (System.Web.HttpContext.Current != null)
{
baseDir += "bin";
}
var files = Directory.GetFiles(baseDir, dllName);
var iTypes = new List<Type>();
foreach (var file in files)
{
var interfaceASM = Assembly.LoadFrom(Path.Combine(baseDir, file));
var types = from t in interfaceASM.GetTypes()
where !string.IsNullOrWhiteSpace(t.Namespace)
select t; foreach (var type in types)
{
if (type.GetInterfaces() != null && type.GetInterfaces().Any())
foreach (var father in type.GetInterfaces())
{
_container.RegisterType(father
, type
, injectionMembers);
}
}
}
}); } }
ServiceLocator中调用它
aaarticlea/png;base64,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" alt="" />
大功告成了,哈哈!
第十六回 IoC组件Unity续~批量动态为Unity添加类型和行为的更多相关文章
- 微信小程序把玩(二十六)navigator组件
原文:微信小程序把玩(二十六)navigator组件 navigator跳转分为两个状态一种是关闭当前页面一种是不关闭当前页面.用redirect属性指定. 主要属性: wxml <naviga ...
- 微信小程序把玩(十六)form组件
原文:微信小程序把玩(十六)form组件 form表单组件 是提交form内的所有选中属性的值,注意每个form表单内的组件都必须有name属性指定否则提交不上去,button中的type两个subm ...
- [你必须知道的.NET]第二十六回:认识元数据和IL(下)
发布日期:2009.03.04 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 书接上回: 第二十四回:认识元数据和IL(上), ...
- 我心中的核心组件(可插拔的AOP)~第六回 消息组件~续
回到目录 上一回写消息组件已经是很久之前的事了,这一次准备把消息组件后续的东西说一下,事实上,第一篇文章主要讲的是发消息,而这一讲最要讲的是收消息,简单的说,就是消息到了服务器之后,如何从服务器实时的 ...
- 一起talk C栗子吧(第一百二十六回:C语言实例--statickeyword)
各位看官们,大家好,上一回中咱们说的内置宏的样例.这一回咱们说的样例是:static关键字. 闲话休提.言归正转. 让我们一起talk C栗子吧! 看官们,C语言提供了static关键字.它常常出如今 ...
- Vue(二十六)父子组件通信
今天写了一个分页公共组件,就出现了父子组件通信的问题,今天来总结下我遇到的父子组件通信问题 一.子组件调取父组件的数据或方法 (1)props 想要把父组件的值,传到子组件中,使用props 比如你在 ...
- Django(十六)Form组件扩展
http://www.cnblogs.com/wupeiqi/articles/6144178.html Form组件 - form表单(验证:保留上次内容) - - Ajax(验证:无需上次内容) ...
- 一起talk C栗子吧(第九十六回:C语言实例--使用共享内存进行进程间通信二)
各位看官们.大家好,上一回中咱们说的是使用共享内存进行进程间通信的样例,这一回咱们接着上一回内容继续说使用共享内存进行进程间通信. 闲话休提,言归正转.让我们一起talk C栗子吧! 我们在上一回中介 ...
- 我心中的核心组件(可插拔的AOP)~第十二回 IoC组件Unity
回到目录 说在前 Ioc组件有很多,之前也介绍过autofac,castle等,今天再来说一下在微软Nlayer DDD架构里使用的unity组件,今天主要说一下依靠注入,如果希望看拦截的用法,可以阅 ...
随机推荐
- codesmith生成java类
今天生成的时候的时候找不到类型转换的文件JavaAlias 后台发现我装完codesmith后,没有把类型转换类放入对应的文件 把System-JavaTableNameComments.csmap和 ...
- (转)C语言16进制输出字符型变量问题
最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: char ...
- Java 下的 JSON库性能比较:JSON.simple
JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它 ...
- Sublime Text 用法小记
复制当前行: Ctrl + Shift + D 上下移动行: Ctrl + Shift + ↑/↓ 选中行部分: Crtl + Shift + ←/→ 格式化json: Ctrl + Alt + J
- java-7311练习(下)
java练习,仅供参考! 欢迎同学们交流讨论. JDK 1.8 API帮助文档 JDK 1.6 API中文文档 第一次小组作业:模拟双色球彩票 第一次小组作业(一) 控制台版 游戏规则: • 双色球为 ...
- Fix git 提交代码错误
今天用git clone下代码,修改,push提交,发现以下错误 [root@localhost gocache]# git push origin master error: The request ...
- [UCSD白板题] Longest Common Subsequence of Three Sequences
Problem Introduction In this problem, your goal is to compute the length of a longest common subsequ ...
- [Leetcode][JAVA] Distinct Subsequences
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- centos 6.X minimal 系列最小化安装完成后,安装mono和jexus过程小记录
在使用虚拟机安装minimal版centos运行mono+jexus的时候,遇到了一些坑,记录一下,比如虚拟机访问不了网络,没wget命令没开放80端口,等等小问题,其他网上教程已经有mono+jex ...
- iOS 资源大全
这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ...