IEventData/EventData: 封裝了EventData信息,觸發event的源對象和時間
IEventBus/EventBus: 定義和實現了了一系列注冊,注銷和觸發事件處理函數的方法。EventBus定義了一個Dictionary容器來存放事件和處理該事件的對象(其實不是對象而是Factory,暫且這樣理解無妨)。其key是Type:在ABP使用Type表示不同的事件,具體而言這個type是EventData派生類的類型。EventData在ABP中有兩個作用:第一用於封裝事件數據,第二,就是使用其本身CLR類型信息來代表不同的事件。Dictionary容器的value是List<IEventHandlerFactory>而不是直接存放處理該事件的對象,首先這是個集合,也就是是說一個事件可以有多個事件處理函數, 第二,IEventHandlerFactory是什么?后文有解釋,簡單理解就是一個工廠,根據其封裝事件處理函數的類型生成實例
EventBusInstaller:實現了IWindsorInstaller接口。第一,Register IEventBus和EventBus到依賴注入框架中,並且resolve IEventBus以得到EventBus的實例。第二,將所有實現了IEventHandler<in TEventData>的類都會添加到Eventbus的_handlerFactories這個集合中。通過EventBusInstaller是一種添加事件處理對象到EventBus的方式。 另一種方式是直接通過EventBus的register方法。
EntityEventData:定義了一個以entity為參數的構造函數,用以將entity實例作為EventData的一部分。
以下這些派生自EntityEventData的類都是空的派生類(既沒有重寫父類中的方法,也沒有自定義新的成員或方法。)。這些類只起到標注的作用,也就是通過類的名字來區分不同的事件。本質上來說,EventBus是通過EventData的派生類的類型來區分不同事件類型的,因為其用於存放事件處理函數的_handlerFactories是一個以EventData派生類的類型為key的Dictionary容器。
EntityChangedEventData,EntityChangingEventData,EntityCreatedEventData,EntityCreatingEventData,EntityDeletedEventData,EntityDeletingEventData,EntityUpdatedEventData,EntityUpdatingEventData:都用於存放事件數據,但更重要的是他們通過其自生的類型表示不同的事件類型。
IEntityChangeEventHelper/EntityChangeEventHelper:用於觸發entity change(create,delete, update)相關的事件.
Abp中只有兩處引用了IEntityChangeEventHelper,分別是AbpDbContext和AbpNHibernateInterceptor。在save方法的時候會通過IEntityChangeEventHelper實例觸發相應的事件。
ExceptionData:用以標識這個事件用於處理Exception的
AbpHandledExceptionData:用以標識這個事件處理Exception的,並且這個事件有ABP底層框架來處理。筆者在Abp框架中沒有發現有處理這種事件的事件處理對象。
IEventHandler/IEventHandler<in TEventData>: 所有事件處理器EventHandler的接口,定義了HandleEvent方法。我們可以實現IEventHandler<in TEventData>接口,以實現自定義的事件處理器。比如下面的例子就定義了一個處理AbpHandledExceptionData事件的事件處理器:
ActionEventHandler:內部類,起到適配器的作用,將一個Action適配成一個事件處理器EventHandler。
IEventHandlerFactory:事件處理器EventHandler的工廠接口,用於創建,獲取和注銷事件處理器EventHandler。
SingleInstanceHandlerFactory:用於創建單例EventHandler的工廠。
TransientEventHandlerFactory:該工廠每次都會創建一個新的EventHandler的實例。
IocHandlerFactory:通過容器生成EventHandler的實例。在Eventbus這個模塊在被初始化的時候,所有實現了IEventHandler<in TEventData>的類都會被注冊到Eventbus的_handlerFactories這個集合中。
FactoryUnregistrar:實現了IDisposable接口,用於注銷factory.
IEventDataWithInheritableGenericArgument:如果你的evendata繼承了這個接口。就可以按照繼承層次往上逐個觸發事件。下面是個例子,來自代碼中的注釋
For example;
Assume that Student inherits From Person. When trigger an EntityCreatedEventData{Student}, EntityCreatedEventData{Person} is also triggered if EntityCreatedEventData implements
this interface.