Spring.NET学习笔记(3)-注册事件注入

来源:互联网 发布:金融网络销售装美女 编辑:程序博客网 时间:2024/05/29 19:28

    事件注入是.net版本的spring特有的,其实现方式是反向的,同时支持静态事件和实例事件

<object id="source" type="Spring.Objects.TestObject, Spring.Core.Tests"/><object id="staticEventListener" type="Spring.Objects.TestEventHandler, Spring.Core.Tests">  <!-- wired up to a static event -->  <listener event="StaticClick" method="HandleEvent">      <ref type="Spring.Objects.TestObject, Spring.Core.Tests"/>  </listener></object><object id="instanceEventListener" type="Spring.Objects.TestEventHandler, Spring.Core.Tests">  <!-- wired up to an event exposed on an instance -->  <listener event="Click" method="HandleEvent">      <ref object="source"/>  </listener></object>

internal class TestEventHandler     {        public virtual void HandleEvent (object sender, EventArgs e)         {            _eventWasHandled = true;        }        public virtual bool EventWasHandled         {            get             {                return _eventWasHandled;            }        }        protected bool _eventWasHandled;    }

 

public event EventHandler Click;public static event EventHandler StaticClick;/// <summary>/// Public method to programmatically raise the <event>Click</event> event/// while testing./// </summary>public void OnClick(){    if (Click != null)    {        Click(this, EventArgs.Empty);    }}/// <summary>/// Public method to programmatically raise the <b>static</b>/// <event>Click</event> event while testing./// </summary>public static void OnStaticClick(){    if (TestObject.StaticClick != null)    {        TestObject.StaticClick(typeof (TestObject), EventArgs.Empty);    }}

 

Server测试

[Test]public virtual void InstanceEventWiring(){    DefaultListableObjectFactory factory = new DefaultListableObjectFactory();    XmlObjectDefinitionReader reader = new XmlObjectDefinitionReader(factory);    reader.LoadObjectDefinitions(new ReadOnlyXmlTestResource("event-wiring.xml", GetType()));    ITestObject source = factory["source"] as ITestObject;    TestEventHandler instanceHandler = factory["instanceEventListener"] as TestEventHandler;    // raise the event... handlers should be notified at this point (obviously)    source.OnClick();    Assert.IsTrue(instanceHandler.EventWasHandled,                  "The instance handler did not get notified when the instance event was raised (and was probably not wired up in the first place).");}
原创粉丝点击