• 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).");
    }
  • 相关阅读:
    Markdown语法
    简易银行管理系统
    登录sql sever
    MainActivity中R为红色
    PLC STL any数据类型
    Oracle ORA-12541,ORA-12514错误
    Myeclispe下struts-config.xml文件无法图形界面打开
    SSH报错
    Myeclispe 代码自动补全
    Mac下多个jdk自由切换
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1553592.html
Copyright © 2020-2023  润新知