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).");
    }
  • 相关阅读:
    ThinkPHP5+jQuery+MySql实现投票功能
    JQ input输入框回车生成标签,可删除,并获取标签的值
    php 使用 CURL 获取数据
    new String创建了几个对象
    java高级开发面试总结
    使用 Sublime Text 将含下划线的字符串批量替换为驼峰命名法格式的字符串
    Synchronized方法锁、对象锁、类锁区别
    利用Redisson实现分布式锁及其底层原理解析
    MySQL索引
    JVM常见面试题
  • 原文地址:https://www.cnblogs.com/lauplay/p/2667489.html
Copyright © 2011-2022 走看看