前面几篇文章分别介绍:程序集反射查找,特性,容器,但它们之间贯穿起来,形成查找Attribute注入IOC容器,就得需要下面这个类帮忙:

1.DependencyAttributeRegistrator(依赖特性注入类),有它才能在引擎初始化的时候 查找Attribute 进行注入

    public class DependencyAttributeRegistrator {#region Fieldsprivate readonly ITypeFinder _finder;private readonly IContainerManger _containerManger;#endregion#region .ctorpublic DependencyAttributeRegistrator(ITypeFinder finder, IContainerManger containerManger){this._finder = finder;this._containerManger = containerManger;}#endregion#region Methodspublic virtual IEnumerable<AttributeInfo<DependencyAttribute>> FindServices(){foreach (Type type in _finder.FindClassesOfType<object>()){var attributes = type.GetCustomAttributes(typeof (DependencyAttribute), false); //这句是关键 查找所有特性foreach (DependencyAttribute attribute in attributes){yield return new AttributeInfo<DependencyAttribute>{Attribute = attribute,DecorateType = type};}}}public virtual void RegisterServices() {this.RegisterServices(this.FindServices());}public virtual void RegisterServices(IEnumerable<AttributeInfo<DependencyAttribute>> services){services = services.OrderBy(it => it.Attribute.Order);foreach (var info in services){Type serviceType = info.Attribute.ServiceType ?? info.DecorateType;_containerManger.AddComponent(serviceType,info.DecorateType,info.Attribute.Key,info.Attribute.LiftStyle);}}public virtual IEnumerable<AttributeInfo<DependencyAttribute>> FilterServices(IEnumerable<AttributeInfo<DependencyAttribute>> services, params string[] configurationKeys){return services.Where(s => s.Attribute.Configuration == null || configurationKeys.Contains(s.Attribute.Configuration));}#endregion}

下一篇:

IOC容器特性注入第六篇:利用MVC注入点,把容器启动

转载于:https://www.cnblogs.com/flyfish2012/p/3781764.html

IOC容器特性注入第五篇:查找(Attribute)特性注入相关推荐

  1. IOC容器特性注入第一篇:程序集反射查找

    学习kooboo的框架发现它的注入容器方法比较特别,同样是利用MVC的注入点,但它是查找网站下面bin所有的DLL利用反射查找特性找到对应的服务注入到容器. 这样的好处很简单:完全可以不用关心IOC容 ...

  2. IOC容器特性注入第四篇:容器初始化

    IOC容器,就是把各种服务都注入到容器里,想要什么就去拿什么,不仅解决服务类和接口类的耦合度还可以提高性能方便管理. 这里封装一个接口类和一个实现类 1.IContainerManager接口 pub ...

  3. Spring框架IOC容器,依赖注入,控制反转

    Spring的配制文件中 以上标签的属性id是不是必须的?不是必须的,如果定义id,那么其它的bean就可以通过此name来引用id 创建beans.xml <?xml version=&quo ...

  4. Spring的IOC创建对象的方式和代码基本解释为什么要有ioc的思维以及Ioc容器和spring依赖注入的解释

    首先我们要知道 Ioc是个啥? ​ IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致 ...

  5. Spring —— IoC 容器详解

    引言 本篇博客总结自官网的<The IoC Container>,其中会结合王富强老师的<Spring揭秘>融入自己的语言和理解,争取通过这一篇文章彻底扫除spring IOC ...

  6. [Spring 深度解析]第7章 IoC容器的初始化过程

    7. IoC容器的初始化过程 ​ 简单来说,IoC容器的初始化是由前面介绍的refresh()方法来启动的,这个方法标志着IoC容器的正式启动.具体来说,这个启动包括BeanDefinition的Re ...

  7. Spring IoC(一)IoC容器的设计与实现:BeanFactory与ApplicationContext

    在写BeanFactory与ApplicationContext 之前,我想先简单聊一聊Spring IoC 容器,希望能给大家一个参考.如果你对这反面的知识比较了解,可以直接跳过. (一)Sprin ...

  8. 面试官:你来说一下Spring IOC容器的创建过程

    这篇文章主要讲解 IOC 容器的创建过程,让你对整体有一个全局的认识,文章没有复杂嵌套的 debug 流程,相对来说比较简单. 不 BB,上文章目录. 1. 基础知识 1.1 什么是 Spring I ...

  9. 透析Spring(一): Spring之IoC容器理解

    序言 记得刚毕业那会儿,出来招工作被问到Spring的核心时,都觉得简单的一笔,直接说不就是IoC(控制反转)和DI(依赖注入)么,然后省略一万字对两个名词的解释.最近空来整理了一下Spring中Io ...

最新文章

  1. python开发软件行么-python适合开发桌面软件吗?
  2. spark-on-yarn日志配置
  3. i 智慧 | 计算产业发展黄金10年 腾讯云弹性计算抢占计算蓝海
  4. 未能找到程序集“platform.winmd_应用程序崩溃后 微软错误报告工具到底是如何联机检查解决方案的?...
  5. dedecms采集功能扩展
  6. 使用no-gui 模式执行分布式测试
  7. 《深入浅出DPDK》读书笔记(十五):DPDK应用篇(Open vSwitch(OVS)中的DPDK性能加速)
  8. http与https的作用与区别
  9. 抗住百万人直播、被联合国推荐,起底飞书技术演进之路!
  10. 水滴状的自己定义视图,让您摆脱单调的Dialog
  11. 使用vs2008搭建php扩展环境
  12. 从马克思看计算机科学,从马克思主义的角度,用科学精神来看生死观,应该说已经解决,或...
  13. Ubuntu20.04 安装在U盘上
  14. QGIS 3. 使用qgis制作三维浮雕地图
  15. 影响中国青年的100句人生名言 1
  16. 用计算机演奏森林时光,森林时光-xpaper全媒体电子报刊系统
  17. 为什么阿里巴巴禁止使用 Executors 创建线程池,而是通过 ThreadPoolExecutor 方式?...
  18. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法...
  19. uniapp 图片上传 删除
  20. 谷歌 ARCore 就是低配版 Tango,它比苹果 ARKit 好在哪?

热门文章

  1. 拖拽 开发 easyui php,Easyui-Builder
  2. jquery 选择器 逗号
  3. 使用 Filebeat 对多行日志进行处理(multiline)
  4. 【考研】考研5大分数线——国家线、院校线、自划线、单科线、录取线的区别
  5. chrome谷歌浏览器截图
  6. 管理mysql表知识点,数据库知识点整理(全)
  7. python彩票预测与分析_130期祥子大乐透预测奖号:后区大小分析
  8. java系统缓存应用_著名java开源缓存系统 【zz】
  9. OpenGL基础51:泛光
  10. Wannafly挑战赛19:C. 多彩的树(状压+容斥)