ABP之事件总线(4)】的更多相关文章

前面已经对Castle Windsor的基本使用进行了学习,有了这个基础,接下来我们将把我们的事件总线再次向ABP中定义的事件总线靠近.从源码中可以知道在ABP中定义了Dictionary,存放三种类型的Factory,然后通过容器的方式实例化相应的handlerfactory.承接前面的随笔,我们为什么要使用IOC? IOC是用来代替反射的.那么反射在我们EventBus中有什么功能?反射是用来创建handler的实例的.那么我们的容器其实就是用来初始化实例这么一点功能的,所以我们不需要过多的…
在上一篇的随笔中,我们已经初步完成了EventBus,但是EventBus中还有诸多的问题存在,那么到底有什么问题呢,接下来我们需要看一看ABP中的源码是如何定义EventBus的. 1.第一个点 在ABP中提供了对Action类型的支持,而我们的自己定义的类中只是针对继承了IEventHandler的接口的类 2.第二个点 在ABP中使用了线程安全的ConcurrentDictionary来存放映射关系,因为EventBus作为一个单例存在,这是必须要考虑的.ConcurrentDiction…
承接上一篇时间总线的学习,在上一篇中我们实现了取消显式注册事件的方式,采用使用反射的方式.这样的好处可以解除Publisher和Scriber的显式依赖,但是问题又来了,因为我们只有Publisher和Scriber,而且我们又要实现这两者的通信,那么无论使用那种方式都不可能解除两者的依赖关系,反射也只是将依赖关系进行隐藏罢了.而且还有一个至关重要的问题,那个我们每个Publisher都得去写那么一坨的反射代码,而且这些代码其实都是公用的.写到这里,突然感觉要解决这两个问题,有一种想法呼之欲出,…
什么是事件总线呢?官方的文档说,它是一个单例对象,由其他的类共同拥有,可以用来触发和处理事件.这个东西确实比较陌生,为什么要使用事件总线,或者说事件总线的优势是什么???首先我们可以明确的是,事件总线的出现是用来代替我们传统的事件的,那么我们传统的事件到底有什么不好呢??我们由浅入深,慢慢研究. 事件我们都比较熟悉,我们用两个例子回顾一下. 1.第一个例子,以前我们在winform的开发程序中到处都是事件,比如 sender:触发事件的对象 e:事件的数据,传递参数 方法中的内容:事件的处理逻辑…
http://www.aspnetboilerplate.com/Pages/Documents/EventBus-Domain-Events EventBus EventBus是个单例,获得EventBus的引用可有下面两个方法: 默认的EventBus实例,使用EventBus.Default即可找到它. EventBus.Default.Trigger(...); //trigger an event 为单元测试考虑,更好的做法是通过依赖注入,获得EventBus的引用,下面是通过属性注入…
在上一篇文章中,我们复习了一下事件的经典的发布订阅模式,同时对是事件源和时间处理逻辑进行抽象统一,用起来也没有问题.但是还是有很多的问题,比如说我们Handle方法其实是违背了单一性的原则的,里面混杂了各个EventData的处理逻辑,这个方法将会越来越大,越来越慢,看着越来越难受.好,那么先解决今天的第一个问题.既然我们前面为了单一化原则,分别定义了不同的xxEventData,那么我们可以同样的定义不同的xxEventHandler. 创建不同的Handler public class Fi…
0.简介 事件总线就是订阅/发布模式的一种实现,本质上事件总线的存在是为了降低耦合而存在的. 从上图可以看到事件由发布者发布到事件总线处理器当中,然后经由事件总线处理器调用订阅者的处理方法,而发布者和订阅者之间并没有耦合关系. 像 Windows 本身的设计也是基于事件驱动,当用户点击了某个按钮,那么就会触发相应的按钮点击事件,而程序只需要监听这个按钮点击事件即可进行相应的处理,而事件被触发的时候往往都会附带相应的事件源,事件所产生的数据等. 还是以按钮被点击为例,该事件被触发的时候会装填上触发…
返回总目录 本篇目录 事件总线 定义事件 触发事件 处理事件 句柄注册 取消注册 在C#中,我们可以在一个类中定义自己的事件,而其他的类可以注册该事件,当某些事情发生时,可以通知到该类.这对于桌面应用或者独立的windows服务来说是非常有用的.但对于一个web应用来说是有点问题的,因为对象都是在web请求中创建的,而且这些对象生命周期都很短,因而注册某些类的事件是很困难的.此外,注册其他类的事件会使得类紧耦合. 领域事件用于解耦并重复利用应用中的逻辑. 事件总线 事件总线是被所有触发并处理事件…
领域事件(事件总线) 事件总线 注入IEventBus 获取默认实例 定义事件 预定义事件 处理异常 实体更改 触发事件 处理事件 处理基础事件 处理者异常 处理多个事件 注册处理者 自动 手动 取消注册 在C#中,一个类可以定义自己的事件,其他类可以注册它以便当一些事情发生时就会被通知.对于桌面应用或者单独的windows服务而言,这是非常有用的.但是,对于Web应用,会有一点儿问题,因为对象在web请求中被创建并且是短暂存在的.注册类事件非常困难.直接注册另一个类的事件会使类变得紧耦合. 在…
事件总线就是订阅/发布模式的一种实现    事件总线就是为了降低耦合 1.比如在winform中  到处都是事件 触发事件的对象  sender 事件的数据    e 事件的处理逻辑  方法体 通过EventBus实现事件对象和处理逻辑的解耦 1.抽离事件对象    发生时间的事件   触发事件的对象源(可选) // // 摘要: // Defines interface for all Event data classes. public interface IEventData { // /…