ABP框架 – 领域事件(伊夫ntBus)

转自:http://blog.csdn.net/supermapsupport/article/details/70254484

文档目录

产品白皮书 
iServer产品 
图片 1 教学视频 
图片 2 许可表达 
图片 3 安装安插 
图片 4 数据对接 
图片 5 缓存配置 
图片 6 增加开发 
图片 7 品质提高 
图片 8 其他 
iPortal产品 
图片 9 成效简介 
图片 10 首页定制 
图片 11 部门配备 
图片 12 权限设置 
图片 13 资源审核 
图片 14 服务托管 
图片 15 在线制图 
图片 16 其他 
iExpress产品 
iCloudManager产品 
图片 17 成效简介 
图片 18 安装手册 
Online产品 
iClient产品 
图片 19 教学摄像 
图片 20 地图突显 
图片 21 数据查询 
图片 22 显示特效 
图片 23 其他 
大规模难题咨询单 
在线演示 
软件下载

 

产品白皮书

产品白皮书详细介绍了SuperMap
GIS各样产品的特色、版本、功效、使用境况等,有助于你周密掌握任何产品连串。链接如下: 
http://blog.csdn.net/supermapsupport/article/details/70211555

本节内容:

iServer资料集锦

EventBus

教学摄像

总体介绍 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=126 
软件安装 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=125 
快快入门 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=127 
劳动管理 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=124 
集合服务 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=121 
集群管理 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=123

准许表达

iServer许可版本划分 
http://blog.csdn.net/supermapsupport/article/details/68489707

概念事件

设置配备

Tar包在Linux上的布局 
http://blog.csdn.net/supermapsupport/article/details/70213449 
War包在linux上的安插 
http://blog.csdn.net/supermapsupport/article/details/70213890 
Ubuntu14.04 Server安装iServer 
http://blog.csdn.net/chinagissoft/article/details/45092713 
Ubuntu设置iserver服务开机自启动 
http://blog.csdn.net/chinagissoft/article/details/45599747 
Weblogic中部署iServer 
http://blog.csdn.net/supermapsupport/article/details/56496496 
Weblogic中发布八个Web工程 
http://blog.csdn.net/supermapsupport/article/details/50233605 
WebSphere中部署iServer 
http://blog.csdn.net/supermapsupport/article/details/48547095 
东方通TongWeb中部署iServer 
http://blog.csdn.net/supermapsupport/article/details/52209154

预订义事件

数码连接

重组第三方地图服务 
http://blog.csdn.net/supermapsupport/article/details/70211072 
对接天地图 
http://blog.csdn.net/supermapsupport/article/details/66974049 
对接百度地图 
http://blog.csdn.net/supermapsupport/article/details/53389554 
WMTS读取 
http://blog.csdn.net/supermapsupport/article/details/50423782 
WFS使用及跨域 
http://blog.csdn.net/supermapsupport/article/details/49995463 
http://blog.csdn.net/supermapsupport/article/details/52935047

缓存配置

缓存介绍 
http://blog.csdn.net/supermapsupport/article/details/48491107 
缓存参数配置 
http://blog.csdn.net/supermapsupport/article/details/70213642 
Mongo切图配置和动用 
http://blog.csdn.net/supermapsupport/article/details/70213927 
Mongo缓存迁移 
http://blog.csdn.net/supermapsupport/article/details/70225655 
MongoDB领到指定切片集 
http://blog.csdn.net/supermapsupport/article/details/53520647 
API创设切图及创新职分 
http://blog.csdn.net/supermapsupport/article/details/52410651 
分布式切图瓦片格式扩充及服务发表 
http://blog.csdn.net/supermapsupport/article/details/49998463

接触事件

推而广之开发

REST资源增加介绍 
http://download.csdn.net/detail/supermapsupport/9797554 
REST资源伸张工程 
http://blog.csdn.net/supermapsupport/article/details/67640640 
iServer投影转换 
http://blog.csdn.net/supermapsupport/article/details/62217384 
点靠近线及打断线 
http://blog.csdn.net/supermapsupport/article/details/68485028 
http://blog.csdn.net/supermapsupport/article/details/69568744 
http://blog.csdn.net/supermapsupport/article/details/69946503

处总管件

特性进步

怎么升级iServer质量 
http://blog.csdn.net/supermapsupport/article/details/52849835 
高可用负载均衡 
http://blog.csdn.net/chinagissoft/article/details/47250965 
http://blog.csdn.net/chinagissoft/article/details/47251001 
集群实践——分布式切图 
http://blog.csdn.net/chinagissoft/article/details/46323277 
集群实践——受控集群 
http://blog.csdn.net/chinagissoft/article/details/46311353 
集群实践——普通集群 
http://blog.csdn.net/chinagissoft/article/details/46301389 
微服务多实例 
http://blog.csdn.net/supermapsupport/article/details/70212246 
怎么布署单机集群 
http://blog.csdn.net/supermapsupport/article/details/70213755

其他

iServer安全部制 
http://blog.csdn.net/supermapsupport/article/details/70214042 
如何幸免单点失效 
http://blog.csdn.net/supermapsupport/article/details/53004906 
http://blog.csdn.net/supermapsupport/article/details/53005467 
数据服务查询并展开动态投影 
http://blog.csdn.net/supermapsupport/article/details/52350637 
一路标绘的商讨 
http://blog.csdn.net/supermapsupport/article/details/47166315

处理程序注册

iPortal资料集锦

意义简介

在介绍iPortal效能前,先来探视《GIS门户平台能为共享平台建设带来怎么着?》,链接: 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=175

反注册

首页定制

首页可视化定制 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_management/Portal_config/stylecustom.htm
贯彻零代码可视化定制门户界面 
http://blog.csdn.net/supermapsupport/article/details/53485427 
首页定制的伸张开发流程 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iPortal_DevelopGuide/Custom_iPortal/End_Web_custom/Home_page_custom.htm
示范录屏: 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=164

 

机关配备

团伙结构的计划和动用 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_management/Portal_Security/organiz_struc_set.htm
资源分享到祥和的机构 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_usage/my_content/myDepartment.htm
以身作则录屏 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=165

在C#里,一个类可以定义自己的风云,然后此外类可以挂号它,当某些事情时有发生时,接收到通告。那对于桌面应用或单机的Windows服务尤其有效。可是,对于一个Web应用,它就有点难题,因为对象在一个web请求里制造,并且它们生命周期都很短。所以就骑虎难下注册一些类事件,同时,直接登记另一个类的轩然大波,也使得类之间尤其藕合。

权限设置

注册服务访问控制 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_management/Portal_config/serviceProxy_config.htm
示范录屏: 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=163 
资源申请,对尚未权力的劳务拓展在线申请 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_usage/resourceApply.htm
资源授权 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_usage/resourceAuthorize.htm
开发授权,调用门户中的服务进行应用开发 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_usage/my_content/AK.htm
管住模块授权,为差其余指挥者授予差其余管理权限 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_management/Portal_Security/role_modu_authri.htm
演示录屏 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=161

天地事件一般用来解藕业务逻辑和在运用里发出重要领域修改时暴发通报。

资源审核

地图审核 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal\_management/mapmanage.htm\#地图审核 
劳务审核 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal\_management/servicesmanage.htm\#劳动审核 
以身作则录屏 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=162

 

劳务托管

上传数据 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_usage/my_content/myDatas.htm
托管服务 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_usage/hostingServices.htm
托管应用服务器的配置和应用 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_management/Services_hosting/Services_hosting.htm
在线制图

EventBus

在线制图

在线制图 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/iP/iportal_usage/mapping/maponline.htm
动用JS API 浏览门户中的地图 
http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iPortal/GettingStarted/iServer_iClient_Start/JS_API_iPortal.htm
以身作则录屏 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=159

伊夫ntBus是一个单例对象,被有着类触发事件或处负责人件时共享。为运用事件总线,你先要引用它,有两种办法。

其他

批量挂号与活动同步演示 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=168 
劳动查询与目录管理示范 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=167 
上传数据公布远程服务与在线制图演示 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=166 
监控多少个iServer服务器演示 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=160

 

iExpress资料集锦

GIS加快器介绍 
http://blog.csdn.net/supermapsupport/article/details/70210368 
GIS服务加快解决方案 
http://blog.csdn.net/supermapsupport/article/details/70210870

注入 IEventBus

iCloudManager资料集锦

你可以用依傍注入赢得一个I伊夫ntBus的引用,这儿大家运用性质注入情势:

成效简介

软件介绍 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=158 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=94 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=158 
动态伸缩专题 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=156 
负载均衡专题 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=155 
OpenStack专题 
http://blog.csdn.net/supermapsupport/article/details/70210642 
vSphere专题 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=154

public class TaskAppService : ApplicationService
{
    public IEventBus EventBus { get; set; }

    public TaskAppService()
    {
        EventBus = NullEventBus.Instance;
    }
}

安装手册

vSphere安装手册

iCloudManager布署—iCloudManager的设置及安装(三) 
http://blog.csdn.net/supermapsupport/article/details/47086217 
iCloudManager安顿—VMware vCenter的设置及安装(二) 
http://blog.csdn.net/supermapsupport/article/details/47084477 
iCloudManager安排—VMware ESXi 5.5装置及安装(一) 
http://blog.csdn.net/supermapsupport/article/details/47083507

Docker安装手册

http://blog.csdn.net/supermapsupport/article/details/51741330 
http://blog.csdn.net/supermapsupport/article/details/70210320 
http://blog.csdn.net/supermapsupport/article/details/70210513

OpenStack安装手册

http://support.supermap.com.cn/product/VedioPlay.aspx?id=157

在注入事件总线上,属性注入比构造器注入更适用。你的类可以没有事件总线,Null伊芙ntBus达成了空对象方式,当你调用它的方法时,方法里什么也不做。

Online资料集锦

对此SuperMap
Online,使用可分为2种,在线应用云主机和使用在线服务,小编先通
过2个摄像为大家介绍下:

在线应用云主机 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=174 
行使在线服务 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=173

 

别的,Online也为大家提供了有关专题文档:

Online的DevOps实践 
http://blog.csdn.net/supermapsupport/article/details/70211213 
在线专题数据运用 
http://blog.csdn.net/supermapsupport/article/details/70211751

收获默许实例

iClient资料集锦

要是您不可以注入它,可以一向运用伊芙ntBus.Default。它是全局的风云总线,使用办法如下所示:

教学视频

软件介绍 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=105 
支出思路 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=99 
神速入门 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=100 
地图显示 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=100 
专题图显示 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=107 
查询 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=98 
客户端专题图 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=128 
互联网分析 
http://support.supermap.com.cn/product/VedioPlay.aspx?id=106

EventBus.Default.Trigger(...); //trigger an event

地图突显

WMTS服务 
http://blog.csdn.net/supermapsupport/article/details/70214054 
高品质渲染图层 
http://blog.csdn.net/supermapsupport/article/details/53322200 
矢量分块图层 
http://blog.csdn.net/supermapsupport/article/details/50039027 
计算专题图 
http://blog.csdn.net/supermapsupport/article/details/59057632 
文本标签 
http://blog.csdn.net/supermapsupport/article/details/64129058 
叠加地图 
http://blog.csdn.net/supermapsupport/article/details/51693031 
地图切换 
http://blog.csdn.net/supermapsupport/article/details/67636072 
高亮及性能浮现 
http://blog.csdn.net/supermapsupport/article/details/51249866 
图层显隐 
http://blog.csdn.net/supermapsupport/article/details/50728060

在其余可能的地方都不提议直接利用伊夫ntBus.Default,因为它难于单元测试。

数码查询

图层过滤 
http://blog.csdn.net/supermapsupport/article/details/52943780 
询问条件过滤 
http://blog.csdn.net/supermapsupport/article/details/53910299 
涉及查询 
http://blog.csdn.net/supermapsupport/article/details/49998205 
http://blog.csdn.net/supermapsupport/article/details/52572791 
交互查询 
http://blog.csdn.net/supermapsupport/article/details/51200238 
大数据量属性查询 
http://blog.csdn.net/supermapsupport/article/details/49866603 
多数据集查询 
http://blog.csdn.net/supermapsupport/article/details/54311880 
实时查询 
http://blog.csdn.net/supermapsupport/article/details/51191500

 

突显特效

时空数据动画 
http://blog.csdn.net/supermapsupport/article/details/49510615 
http://blog.csdn.net/supermapsupport/article/details/51970524 
特性窗口介绍 
http://blog.csdn.net/supermapsupport/article/details/50053901

概念事件

其他

目的打断 
http://blog.csdn.net/supermapsupport/article/details/52032637 
VectorLayer使用指南 
http://blog.csdn.net/supermapsupport/article/details/50717284 
要素图层介绍 
http://blog.csdn.net/supermapsupport/article/details/50686979 
JS之Handler 介绍 
http://blog.csdn.net/supermapsupport/article/details/50684113 
客户端量算 
http://blog.csdn.net/supermapsupport/article/details/50680724 
拖拽绘制图标 
http://blog.csdn.net/supermapsupport/article/details/68945547 
动态标绘 
http://blog.csdn.net/supermapsupport/article/details/53579418 
http://blog.csdn.net/supermapsupport/article/details/53885477

在触发一个事件前,你首先要定义它,通过一个持续自伊夫ntData的类来表现一个风浪。如果当一个任务到位后大家想触发一个事件:

至于iClient3D的上学材料,作者为大家提供了从数据到支付的全体系资料,请移步如下链接:

http://blog.csdn.net/supermapsupport/article/details/68924713

public class TaskCompletedEventData : EventData
{
    public int TaskId { get; set; }
}

广大难点咨询单

本条类富含处管事人件类所须求的特性,伊芙ntData类定义了伊夫ntSource(事件源,哪个目的触发了风浪)和伊夫nt提姆e(何时触发的)属性。

iServer常见难题概括

http://blog.csdn.net/supermapsupport/article/details/52222933 
http://blog.csdn.net/supermapsupport/article/details/52223322 
http://blog.csdn.net/supermapsupport/article/details/52223464 
http://blog.csdn.net/supermapsupport/article/details/52223527 
http://blog.csdn.net/supermapsupport/article/details/52223667 
http://blog.csdn.net/supermapsupport/article/details/52223784 
http://blog.csdn.net/supermapsupport/article/details/59483938

 

iClient常见难点汇总

http://blog.csdn.net/supermapsupport/article/details/52222669 
http://blog.csdn.net/supermapsupport/article/details/52222778 
http://blog.csdn.net/supermapsupport/article/details/59483847

预约义事件

在线演示

在下载安装SuperMap产品前,您可先通过在线网址查看iClient的部分效能: 
http://support.supermap.com.cn:8090/iserver/iClient/forJavaScript/index.html

拍卖完非凡

软件下载

软件下载链接如下: 
http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx

ABP定义了AbpHandledExceptionData,并当ABP自动处理其余极度时,会接触那么些事件,那在您想驾驭越多可怜音信时越发有用(即便ABP自动记录了具备尤其)。你可以注册那一个事件,当非常暴发时,发出公告。

其余产品材料集锦敬请关怀。

 

实业修改

为实体修改提供了泛型的事件:EntityCreation伊芙ntData<Tentity>、EntityCreated伊芙ntData<TEntity>、EntityUpdating伊芙ntData<TEntity>、EntityUpdate伊夫ntData<TEntity>、EntityDeleting伊夫ntData<TEntity>和EntityDeleted伊夫ntData<TEntity>,同样也有EntityChanging伊芙ntData<TEntity>和EntityChanged伊芙ntData<TEntity>,修改能够是插入、更新或删除。

“ing”事件(例如EntityUpdating)在保存修改(SaveChanges)前触发,所以您可以在那一个事件里,通过抛出越发,促使工作单元回滚,阻止操作)。“ed”事件(例如EntityUpdated)在保存修改将来被触发,也就一直不机会让工作单元回滚了。

实业修改事件定义在Abp.伊夫nts.Bus.Entities命名空间里,并在插入、更新或删除实体时,被ABP自动触发。假设你有一个Person实体,你可以注册EntityCreated伊芙ntData<Person>,当一个新的Person创造并插入到数据库后,就可以接过文告。这一个事件也支撑继承,倘诺你有一个持续自Person的Student类,并且注册了EntityCreated伊夫ntData<Person>,当一个Person或Student被插入后,你也会接收通告。

 

接触事件

接触一个事变很粗略:

public class TaskAppService : ApplicationService
{
    public IEventBus EventBus { get; set; }

    public TaskAppService()
    {
        EventBus = NullEventBus.Instance;
    }

    public void CompleteTask(CompleteTaskInput input)
    {
        //TODO: complete the task on database...
        EventBus.Trigger(new TaskCompletedEventData {TaskId = 42});
    }
}

Trigger方法有多少个重载:

EventBus.Trigger<TaskCompletedEventData>(new TaskCompletedEventData { TaskId = 42 }); //Explicitly declare generic argument
EventBus.Trigger(this, new TaskCompletedEventData { TaskId = 42 }); //Set 'event source' as 'this'
EventBus.Trigger(typeof(TaskCompletedEventData), this, new TaskCompletedEventData { TaskId = 42 }); //Call non-generic version (first argument is the type of the event class)

接触事件的另一个方法是:使用AggregateRoot类的Domain伊芙nts集合(查看实体文档的连带小节)。

 

处总管件

为处理一个事变,你应当完结I伊芙ntHandler<T>接口,如下所示:

public class ActivityWriter : IEventHandler<TaskCompletedEventData>, ITransientDependency
{
    public void HandleEvent(TaskCompletedEventData eventData)
    {
        WriteActivity("A task is completed by id = " + eventData.TaskId);
    }
}

I伊夫ntHandler定义了Handle伊芙nt方法,并像上边那样达成它。

伊夫ntBus被重组到依靠注入系统里,如大家地点那样完成ITransientDependency,当一个TaskCompleted事件时有爆发后,它创造一个新的ActivityWriter实例,并调用它的Handle伊芙nt方法,然后释放它,愈来愈多音讯查阅凭借注入

 

处理基类事件

EventBus帮忙事件的一而再,例如:你可以创设一个Task伊夫ntData和三个子类:TaskCompleted伊芙ntData和TaskCreated伊夫ntData:

public class TaskEventData : EventData
{
    public Task Task { get; set; }
}

public class TaskCreatedEventData : TaskEventData
{
    public User CreatorUser { get; set; }
}

public class TaskCompletedEventData : TaskEventData
{
    public User CompletorUser { get; set; }
}

下一场你可以落成I伊夫nthandler<Task伊芙ntData>来处理那三种事件:

public class ActivityWriter : IEventHandler<TaskEventData>, ITransientDependency
{
    public void HandleEvent(TaskEventData eventData)
    {
        if (eventData is TaskCreatedEventData)
        {
            //...
        }
        else if (eventData is TaskCompletedEventData)
        {
            //...
        }
    }
}

那也就象征,你可以兑现I伊夫ntHandler<EventData>来拍卖利用中的所有事件,你恐怕不想这么做,但它是足以达成的。

 

处理程序至极

在处理程序(Handler)抛出一个/一些可怜时,伊夫ntbus触发所有Handler事件,如若唯有一个处理程序抛出格外,卓殊会向来被Trigger方法抛出,假如多少个处理程序抛出卓殊,伊夫ntBus只为它们抛出一个AggregateException格外。

 

处理四个事件

在一个处理程序里你可以拍卖三个事件,此次,你应有为各样事件达成I伊芙ntHandler<T>,例如:

public class ActivityWriter : 
    IEventHandler<TaskCompletedEventData>, 
    IEventHandler<TaskCreatedEventData>, 
    ITransientDependency
{
    public void HandleEvent(TaskCompletedEventData eventData)
    {
        //TODO: handle the event...
    }

    public void HandleEvent(TaskCreatedEventData eventData)
    {
        //TODO: handle the event...
    }
}

 

处理程序注册

为处管事人件,我们必须在事件总线里登记处理程序。

 

自动

ABP找到所有完成IEVentHandler的类并注册到依靠注入(例如:通过落实ITransientDependency,如上面的演示),然后ABP自动把它们注册到事件总线,当一个事变暴发,ABP使用器重注入拿四处理程序的引用,并在事件处理后刑满释放该引用。在ABP里,那是选拔事件总线的推介的章程。

 

手动

可以手动注册事件,但要小心使用。在一个web应用里,事件注册应当中接纳启动里落成。在一个Web请求里,注册事件不是一个好的主意,因为注册类请完结后持续注册,并为每个请求重新登记,那可能会唤起难题,因为注册类多次被调用。同时要牢记,手动注册不拔取看重注入系统。

事件总线的Register方法有多少个重载,最简便易行的是承受一个信托(或lambda):

EventBus.Register<TaskCompletedEventData>(eventData =>
    {
        WriteActivity("A task is completed by id = " + eventData.TaskId);
    });

“职分成功”事件时有发生后,那一个lambda方法就会被调用。第四个是接受一个落到实处了I伊芙ntHantler<T>的目的:

EventBus.Register<TaskCompletedEventData>(new ActivityWriter());

相同是为事件调用ActivityWriter实例。第多个重载接受三个泛型参数:

EventBus.Register<TaskCompletedEventData, ActivityWriter>();

这一次,事件总线为每个事件创制一个新的ActivityWriter,如若它是disposable(可释放),并调用ActivityWriter.Dispose方法。

末段,你能够登记一个事件处理程序办事,负责处理程序的开创。一个处理程序工厂有八个办法:GetHandler和ReleaseHandler。例如:

public class ActivityWriterFactory : IEventHandlerFactory
{
    public IEventHandler GetHandler()
    {
        return new ActivityWriter();
    }

    public void ReleaseHandler(IEventHandler handler)
    {
        //TODO: release/dispose the activity writer instance (handler)
    }
}

再有一个例外的厂子类IocHandlerFactory。它利用依赖注入系统来创制/释放处理程序。ABP在自行注册里也采纳那么些类,所以,假如你想利用信赖注入系统,直接利用此前定义的全自动注册。

 

反注册

当你向事件总线注册后,想反注册事件,最简单易行的办法就是刑满释放Register方法重临的值,例如:

//Register to an event...
var registration = EventBus.Register<TaskCompletedEventData>(eventData => WriteActivity("A task is completed by id = " + eventData.TaskId) );

//Unregister from event
registration.Dispose();

理所当然,其余地点或其余某个时刻,都可能须要反注册,你可以保留注册对象并在须要时释放它。Register方法的具有重载都回来一个可放飞的目的给事件。

伊芙ntBus也提供了Unregister方法,使用示例:

//Create a handler
var handler = new ActivityWriter();

//Register to the event
EventBus.Register<TaskCompletedEventData>(handler);

//Unregister from event
EventBus.Unregister<TaskCompletedEventData>(handler);

它也提供了重载来反注册委托和工厂。反注册处理程序对象必须是注册时的靶子。

末尾,伊芙ntBus提供了一个UnregisterAll<T>()方法,它反注册一个轩然大波的具有处理程序,UnregisterAll()方法反注册所有事件的富有处理程序。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注