zoukankan      html  css  js  c++  java
  • 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).");
    }
  • 相关阅读:
    79.Word Search
    78.Subsets
    77.Combinations
    75.Sort Colors
    74.Search a 2D Matrix
    73.Set Matrix Zeroes
    71.Simplify Path
    64.Minimum Path Sum
    63.Unique Paths II
    Docker 拉取 oracle 11g镜像配置
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1553592.html
Copyright © 2011-2022 走看看