C#-c#如何利用IoC 进行事件处理

C#-c#如何利用IoC 进行事件处理

虐人心 发布于 2017-08-26 字数 0 浏览 1114 回复 1

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想挽留 2017-09-14 1 楼

C #中,事件在本质上使用了「代理」(或者叫委托)
C #中,事件的参数是一个Ojbect型的发送者和一个EventArgs类型的事件信息列表
使用中,事件混合了一个或多个事件处理方法
当一个事件发生时,之前加入到这个事件代理的方法会被顺序执行
例如:

public class EventSource
{
public event EventHandler Click;
public void OnClick()
{
if (Click != null)
{
Click(this, EventArgs.Empty); // Fire the event off to the registered handler methods
}
}
}
public class EventSourceHandler
{
public event EventHandler HandlerEvent;
}

public class Test_
{
void test()
{
EventSource source = new EventSource();
EventSourceHandler eventListener1 = new EventSourceHandler(); // Adding the first event handler method to the event
EventSourceHandler eventListener2 = new EventSourceHandler(); // Adding a second event handler method to the event

source.Click += eventListener1.HandlerEvent;
source.Click += eventListener2.HandlerEvent;
source.OnClick(); // First eventListener1.HandleEvent is invoked, then eventListener2.HandleEvent
}
}

IoC 中,声明事件处理 EventHandler

…………………………………………………………

配置文件:

<object id="eventListener1" type="SpringdotNETEventsExample.TestEventHandler, SpringdotNETEventsExample">
<!-- wired up to an event exposed on an instance -->
<listener event="Click" method="HandleEvent">
<ref object="source"></ref>
</listener>
</object>

<object id="eventListener2" type="SpringdotNETEventsExample.TestEventHandler, SpringdotNETEventsExample">
<!-- wired up to an event exposed on an instance -->
<listener event="Click" method="HandleEvent">
<ref object="source"></ref>
</listener>
</object>

说明:

可以在配置项中使用<listener>标签来标注事件处理程序

event 是事件名称,是一个EventHandler名称 注:EventHandler是一个「代理」类型
第二种配置方式:

 <object id="eventListener" type="SpringdotNETEventsExample.TestEventHandler, SpringdotNETEventsExample">
<listener method="Handle.+">
<ref object="source"></ref>
</listener>
</object>

说明:

你可以使用正则表达式来标注method
Handle.+ 就是一个正则表达式
第三种配置方式:

 <object id="eventListener" type="SpringdotNETEventsExample.TestEventHandler, SpringdotNETEventsExample">
<listener method="HandleEvent" event="Cl.+">
<ref object="source"></ref>
</listener>
</object>

说明:

你可以在event中使用正则表达式来过滤处理程序