Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)
3、ICustomerService没有在容器中进行注册,很显然上面的代码不能测试通过,现在创建一个MyRegistrationSource类,实现IRegistrationSource接口:
4、测试: 取消//builder.RegisterSource(new MyRegistrationSource());行的注释,再次测试通过。
上面的例子看起来有点小题大作或者说完全没必要,因为我们已经明确知道接口及其实现类,有两种替代方式可以实现相同的目的。首先可以创建一个 Autofac模块(继承自Module类或IModule接口皆可),在其Load方法中进行注册;或者直接在创建ContainerBuilder对 象的地方注册,比如:
三、DefaultOrchardEventBus DefaultOrchardEventBus类的作用是通过反射动态调用一组对象的某一个方法,它提供了缓存机制弥补反射的低性能,并提供了异常处理接口。 该类的构造函数接受两个参数,类型分别是Func<IEnumerable<IEventHandler>>委托和 IExceptionPolicy类型。通过第一个参数可以获取包含调用方法的类序列。通过第二个参数提供异常处理策 略,IExceptionPolicy可以处理异常(比如日志记录),还可以决定是否把异常继续由DefaultOrchardEventBus向外抛 出。 该类还有唯一的公开方法Notify,接受一个字符串和IDictionary<string, object>型参数。字符串由"."号分隔,"."前面是接口短名称(注意不是类名称),后面是被调用方法名称。 IDictionary<string, object>型参数包含调用方法时要传递的参数。通过接口名称和方法名称查找某一个类型的方法并调用。Notify返回IEnumeralbe型 参数,是所有被调用方法返回值的集合。 在某个角度上看,DefaultOrchardEventBus类似于WPF的ObjectDataProvider。
四、Orchard Event Bus机制 有了上面的知识积累,下面通过一个简单的实例来分析Orchard的Event Bus机制。 我们来实现一个简单的观察者模式。 1、新建一个控制台项目,并准备一些接口和类
在不修改控制台的项目源码的前提下,目前来说是没有办法的。我们可以通过反射,在所有程序集中搜索所有观察者,创建其实例并添加到Subject的Handlers中。Orchard Event Bus就用类似的方式很好地解决了这些问题。
相关类型:
参考资料: 观察者模式 Castle动态代理
http://skywalkersoftwaredevelopment.net/orchard-development/api/autofac-module(Autofac模块) http://code.google.com/p/autofac/wiki/RelationshipTypes(Dynamic instantiation,DefaultOrchardEventBus类构造函数)
Orchard源码分析(4.3):Orchard.Events.EventsModule类(Event Bus)的更多相关文章
- Orchard源码分析(5):Host相关(Orchard.Environment.DefaultOrchardHost类)
概述 Host 是应用程序域级的单例,代表了Orchard应用程序.其处理应用程序生命周期中的初始化.BeginRequest事件.EndRequest事件等. 可以简单理解为HttpApplicat ...
- Spring源码分析——BeanFactory体系之抽象类、类分析(二)
上一篇分析了BeanFactory体系的2个类,SimpleAliasRegistry和DefaultSingletonBeanRegistry——Spring源码分析——BeanFactory体系之 ...
- Orchard源码分析(1):Orchard架构
本文主要参考官方文档"How Orchard works"以及Orchardch上的翻译. 源码分析应该做到庖丁解牛,而不是以管窥豹或瞎子摸象.所以先对Orchard架构有 ...
- Spring源码分析——BeanFactory体系之抽象类、类分析(一)
上一篇介绍了BeanFactory体系的所有接口——Spring源码分析——BeanFactory体系之接口详细分析,本篇就接着介绍BeanFactory体系的抽象类和接口. 一.BeanFactor ...
- Thinkphp源码分析系列(二)–引导类
在上一章我们说到,ThinkPHP.php在设置完框架所需要的变量和调教好环境后,在最后调用了 Think\Think::start(); 即Think命名空间中的Think类的静态方法start ...
- spring源码分析系列 (5) spring BeanFactoryPostProcessor拓展类PropertyPlaceholderConfigurer、PropertySourcesPlaceholderConfigurer解析
更多文章点击--spring源码分析系列 主要分析内容: 1.拓展类简述: 拓展类使用demo和自定义替换符号 2.继承图UML解析和源码分析 (源码基于spring 5.1.3.RELEASE分析) ...
- Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第1节: FastThreadLocal的使用和创建
Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 概述: FastThreadLocal我们在剖析堆外内存分配的时候简单介绍过, 它类似于JDK的ThreadL ...
- Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第2节: FastThreadLocal的set方法
Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第二节: FastThreadLocal的set方法 上一小节我们学习了FastThreadLocal的创建和 ...
- Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第3节: recycler的使用和创建
Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第三节: recycler的使用和创建 这一小节开始学习recycler相关的知识, recycler是n ...
随机推荐
- Thinking in java学习笔记之垃圾回收器如何工作
垃圾回收器使得java在堆上分配空间的速度可以和其他语言从堆栈上分配空间的速度媲美.
- 二叉查找树 C++实现(含完整代码)
一般二叉树的查找是通过遍历整棵二叉树实现,效率较低.二叉查找树是一种特殊的二叉树,可以提高查找的效率.二叉查找树又称为二叉排序树或二叉搜索树. 二叉查找树的定义 二叉排序树(Binary Search ...
- IOS实现动画的几种简单方法
1.使用 NSTimer 来实现 [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(setNeed ...
- 【BZOJ-1976】能量魔方Cube 最小割 + 黑白染色
1976: [BeiJing2010组队]能量魔方 Cube Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 884 Solved: 307[Submi ...
- 【poj2774】 Long Long Message
http://poj.org/problem?id=2774 (题目链接) 题意 给出两个只包含小写字母的字符串,求出最长连续公共子串. solution 第一次用后缀数组,感觉有点神...才发现原来 ...
- codeforces 580D:Kefa and Dishes
Description When Kefa came to the restaurant and sat at a table, the waiter immediately brought him ...
- css后代选择器(div.class中间不带空格)
如果我要查找<div>上用了.class的元素,查找方法:div.class:中间是不空格的. 以上这种形式为css后代选择器 参考:http://www.w3school.com.cn/ ...
- ecshop /flow.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP的配送地址页面网页没有验证地区参数的有效性,存在sql注入漏 ...
- 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表
一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...
- 基本概率分布Basic Concept of Probability Distributions 6: Exponential Distribution
PDF version PDF & CDF The exponential probability density function (PDF) is $$f(x; \lambda) = \b ...