当前位置:首页 > 日记 > 正文

在ABP框架中详细描述域层中的域事件域事件

在ABP框架中详细描述域层中的域事件域事件
C #,类可以定义其专属活动和其他类可以登记事件,听,和事件通知可以得到当事件被触发。这对于桌面应用程序或独立的Windows服务是非常有用的。但是,有一个问题,因为对象是基于Web应用程序的请求(请求)创建他们的生命周期很短,这是我们登记其他事件类别的困难。同样,直接注册其他类别的事件也使类之间的耦合。

在应用程序系统中,域事件用于解耦和重用(重用)业务逻辑。

事件总线

事件总线是单个对象的一个对象,它由所有其他类共享,并且可以由它触发和处理:

获取默认实例(获取默认实例)

你可以使用eventbus。默认直接。它是一个全球性的事件总线,可以用如下:
EventBus.Default.Trigger(…); / /触发事件
注射ieventbus事件接口(注ieventbus)

除了使用eventbus。默认直接,你也可以使用依赖注入(DI)获得ieventbus参考。这是单元测试的好。在这里,我们使用属性注入范式:
公共课taskappservice:applicaservice {
公共ieventbus eventbus {有};集;
公共taskappservice(){
eventbus = nulleventbus。实例;
}
}
事件总线注射,它更适合使用属性注入到构造器注入。事件是由类和事件对象的描述是从EVENTDATA继承。假设我们想触发事件完成任务后:
公共课taskcompletedeventdata EVENTDATA {:
public int taskId设置;} {得到;
}
在这个类中包含的属性都需要由类当处理一个事件,事件数据类定义的属性(EventSource对象触发此事件)和eventtime(触发时)。

定义事件

公司定义了一个abphandledexceptiondata事件自动触发此事件发生异常时,这是特别有用当你想获得有关异常的更多信息(即使有自动记录所有的例外),你可以登记这一事件并将其设置为触发当异常发生的时间。

公司还提供实体变化很多通用的事件数据类:entitycreatedeventdata,entityupdatedeventdata,和entitydeletedeventdata。他们在abp.events.bus.entitis命名空间定义。当一个特定的实体添加/更新/删除,这些事件自动触发ABP。如果你有一个个人的实体,可以注册entitycreatedeventdata,事件将被触发时,新的个人实体的创建和插入到数据库中。这些事件也支持继承。如果学生从人类继承,你登记在entitycreatedeventdata,那么你将加入的人或学生受到触发。

触发事件

触发事件的示例如下:
公共课:应用服务taskappservice {
公共ieventbus eventbus {有};集;
公共taskappservice(){
eventbus = nulleventbus。实例;
}

公共无效completetask(completetaskinput输入){
在数据库上完成了任务。
EventBus . Trigger(新taskcompletedeventdata { taskId = 42 });
}
}
有一些沉重的触发方法:
EventBus . Trigger(新taskcompletedeventdata { taskId = 42 });
EventBus . Trigger(这一点,新的taskcompletedeventdata { taskId = 42 });
EventBus . Trigger(typeof(taskcompletedeventdata),这样,新的taskcompletedeventdata { taskId = 42 });
事件处理

处理事件,你应该实现ieventhandler界面如下:
公共课activitywriter:IEventHandler,itransientdependency {
public void HandleEvent(taskcompletedeventdata EVENTDATA){
writeactivity(完成一项任务的ID =+事件数据。taskId);
}
}
eventbus已经集成到一个依赖注入系统。我们itransientdependency在上面的例子中,当taskcompleted事件被触发时,它将创建的activitywriter类的新实例并调用它的handleEvent方法,然后释放它。有关详细信息,请参阅狄第。

1。基本事件的处理(处理基本事件)

eventbus支持事件的继承。例如,您可以创建taskeventdata两继承类:taskcompletedeventdata和taskcreatedeventdata:

公共课taskeventdata EVENTDATA {:
公共任务任务{ get;set;}
}

公共课taskcreatedeventdata:taskeventdata {
公共用户creatoruser {有};集;
}

公共课taskcompletedeventdata:taskeventdata {
公共用户completoruser {有};集;
}

然而,你可以实现ieventhandler处理两事件:
公共课activitywriter:IEventHandler,itransientdependency {
public void HandleEvent(taskeventdata EVENTDATA){
如果(事件数据是taskcreatedeventdata){

其他{ }

}
}
}
当然,你也可以实现ieventhandler处理所有的事件,如果你真的想这样做。

2。处理多个事件(处理多个事件)

在一个单处理器(处理器),我们可以处理多个事件。在这一点上,你应该实施不同的事件ieventhandler。例子如下:
activitywriter公共类:
IEventHandler,
IEventHandler,
itransientdependency
{
public void HandleEvent(taskcompletedeventdata EVENTDATA){
处理事件
}
public void HandleEvent(taskcreatedeventdata EVENTDATA){
处理事件
}
}
登记处理

我们需要将处理器(处理程序)注册到事件总线中来处理事件。

1。自动自动

ABP扫描所有的类实现ieventhandler接口和自动登记到事件总线。当事件发生时,它得到的处理器(处理器)的引用对象的依赖注入(DI)和释放事件后完成。这是一个比较推荐的方式使用事件总线在ABP。

2。手动(手动)

你也可以手动登记事件,但会有一些问题。在web应用中,事件的注册应用程序时应当启动开始,活动时注册Web请求(request)的到来,和行为是重复的。这可以在你的应用程序引起的问题,因为注册类可以引用了很多次,也要注意,手动注册不能使用依赖注入系统的重要。

ABP提供了重载的多事件总线注册方法(重载),最简单的重载方法之一是等待委托或lambda。
(EVENTDATA = > eventbus登记。
{
writeactivity(完成一项任务的ID =+事件数据。taskId);
});
因此,事件:任务完成后会发生和LAMBDA方法会被调用。二重载方法等,实现了IEventHandler的一个对象:
eventbus。登记(新activitywriter());
在上述例子中,如果activitywriter称为事件。这种方法也有一个非泛型重载。另一个重载接受两个综合参数:

eventbus登记();

在这一点上,事件总线为每个事件创建一个新的activitywriter。当它被释放,它调用Dispose方法activitywriter。

最后,你可以登记一个事件处理程序工厂创建一个处理器,处理器厂有两种方法:那么GetHandler和ReleaseHandler。示例如下:
公共课activitywriterfactory:ieventhandlerfactory {
市民IEventHandler GetHandler(){
返回新的activitywriter();
}
ReleaseHandler(IEventHandler handler){ public void
/ /待办事项:发布activitywriter实体(处理器)
}
}
公司还提供了一个特殊的工厂类,iochandlerfactory,其中,依靠喷射系统,可用于创建或释放(处置)processors.abp可以自动登记iochandlerfactory。因此,如果你想使用依赖注入系统,直接使用自动配准方法。

注销登记事件

当您手动注册事件总线时,您可能希望在这之后取消注册:
注册事件
var = eventbus登记。登记(EVENTDATA = writeactivity(任务由=身份+事件数据。taskId完成));
取消事件的注册
登记。处置();
当然,取消注册可以在任何地方进行。保存(保留)已注册良好的对象,并在取消注册时处理它。所有注册方法的重载(重载)将返回一个可释放的对象(一次性)取消该事件的注册。

事件总线还提供了取消注册的方法:
创建处理器
VAR处理=新activitywriter();
注册事件
eventbus登记(处理);
取消事件注册
eventbus Unregister(处理);
它还提供了一个重载的方法来取消委托和工厂。取消注册的处理器对象必须与以前注册的对象相同。

最后,eventbus提供unregisterall()取消事件的所有处理器的注册方法,而unregisterall()方法是所有事件的所有处理器。

相关文章

如何设置透视效果立体字

如何设置透视效果立体字

立体字,透视,如何设置,效果,电脑软件,立体透视的字符可以在许多设计中使用,今天我们分享这个项目。 软件名称:CorelDRAW X8的64位简体中文免安装版(附序列号)软件大小:547.9mb更新时间:2016-11-23 1。添加透视效果 1。打开软件,如图表, 2,选择文本…

jQuery请求导出excel表的实现代码

jQuery请求导出excel表的实现代码

请求,代码,电脑软件,jQuery,excel,直接遵守代码 $(# BTN出口)。Click(function(){) var ExportExcel =export_excel ; dataparams { ExportExcel } = 1; var params参数(dataparams)=美元; var url =主机++参数; $()。AppendTo('body '),提交()删除(); 删除data…

excel中产品比例功能计算的操作技

excel中产品比例功能计算的操作技

操作技巧,产品,计算,函数,比例,excel经常用来做表格,用来做一些数据计算和统计。你知道如何使用excel函数计算产品的百分比吗今天,萧边教你如何计算在Excel产品比例。 excel中计算产品比例的操作方法 以下表为例,计算A2在所有通过数中的比例…

oracle自定义拆分功能实例详细解决

oracle自定义拆分功能实例详细解决

自定义,解决方案,拆分,实例,功能,oracle自定义拆分功能 Oracle不提供拆分功能,但你可以建立一个函数来实现这个功能。例如,ABC DEFG hijkl nmopqr stuvw XYZ,分离器是一个空间,但空间的数量是不固定的。 源代码: 创建或替换型ty_str_split是表…

jQuery删除了Live()、死()的新方法,新版

jQuery删除了Live()、死()的新方法,新版

新版本,事件绑定,删除,新方法,电脑软件,我的蛋是痛苦的10分钟,怎么打错了,最后一次检查,原来的jQuery已经删除的生活()和死亡()方法。新的事件绑定方法(),放了()的使用方法。 新的绑定方法()是比以前的生活相比更有效的()。因为生活()固定在文档节点。如果绑…

本地js实现了风箱类型演示,并封装了

本地js实现了风箱类型演示,并封装了

运动,类型,实例代码,框架,风箱,据说这个演示是建立在一个培训机构的基础上的,非常感谢培训结构。 首先,在学习过程的前端,转盘图形是我们必须学习的,所以为了实现各种旋转木马图形更高效的包装,一个运动的框架。 功能getstyle(obj,ATTR){ 如果(obj…

如何删除前景中的段落标记

如何删除前景中的段落标记

删除,段落,标记,景中,电脑软件,当您在Outlook中构建新邮件时,会显示大量段落标记,以使该行看起来不那么整洁。 如何擦除它们 把它们隐藏在编辑器中: Outlook 2010 新的电子邮件,打开文件标签,点击选项;。 单击选项窗口左侧;邮件;单击编辑选项按…

在powerpoint2013多图像的快速插入

在powerpoint2013多图像的快速插入

多图,快速,电脑软件,大多数时候,我们需要插入图片的演示文稿,常规步骤是切换到插入选项卡,单击;;;形象;官能团按钮,但此操作会在同一个幻灯片只有多张图片,如果你需要更多的比一个图片中嵌入了不同的幻灯片,必须插入它,显然太麻烦。 解决办法很简单,还…

如何建立一个ppt2013教程ppt2013实

如何建立一个ppt2013教程ppt2013实

教程,透明,建立一个,电脑软件,PPT现在是越来越漂亮,我的大多数朋友或PS,AI和其他的图像软件处理,然后通过插入,虽然很好,不太多,事实上,不是PS可以实现一些PPT的图像效果,今天就来谈谈如何插入图片变成透明的,但这是很好的技能哦。下面将告诉你如何…

在夏天的曝光不足的人类形象PS图象

在夏天的曝光不足的人类形象PS图象

恢复,图象,处理软件,夏天,人类,第一个是关于简介;underexposing起源,黑色;在一个炎热的夏天的中午,气温高,光照强,而且顶光!如果不是那个时候很忙,我就不会选择那个时候拍照,它是坑坑的助手模型,但因为在这个模型中!电影笑得太可爱自然,所以不能删除留…

jQuery禁用弹出层底部滚动条后(移动

jQuery禁用弹出层底部滚动条后(移动

移动端,弹出层,滚动条,位置,电脑软件,最近,我忙于开发jQuery的前端,我学到了很多知识。今天,萧边给你一个代码片段的代码禁用滚动条的弹出层后。 具体代码如下: Click(函数(){) VaR scrollTop = document.body.scrolltop; / /单击保存在滚动条的位…

如何依靠PS实用技巧PS图象处理软件

如何依靠PS实用技巧PS图象处理软件

图象,处理软件,实用技巧,电脑软件,PS,我们发现了一些照片,脸上有点低,这是要用PS到你的脸,然后你知道薄PS图象处理软件字符这里是小人物完成PS图象处理软件电梯,我希望能给你答案。 瘦脸方法PS图象处理软件 首先打开PS图象处理软件软件,找到照…