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

    事件注入是.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).");

}

你可能感兴趣的:(spring)