zoukankan      html  css  js  c++  java
  • Spring.Net学习笔记(6)-方法注入

    一、开发环境

    系统:win10

    编译器:VS2013

    二、涉及程序集

    Spring.Core.dll 1.3.1

    Common.Logging.dll

    三、开发过程

    1.项目结构

    image

    2.编写Mobile.cs

    namespace SpringNetMethodDi
    {
        public abstract class Mobile
        {
            //可以是virtual
            public abstract SendTool GetSendTool();
        }
    }

    3.编写SendTool.cs

    namespace SpringNetMethodDi
    {
        public class SendTool
        {
            public void WeChat()
            {
                Console.WriteLine("我是Kimisme,正在用微信发信息");
            }
        }
    }

    4.编写RealOp.cs

    namespace SpringNetMethodDi
    {
        public class RealOp
        {
            public virtual string Buy(string goods)
            {
                return goods + "是昨天的剩下的";
            }
        }
    }

    5.编写SuperMarket.cs

    namespace SpringNetMethodDi
    {
        public class SuperMarket : IMethodReplacer
        {
            public object Implement(object target, System.Reflection.MethodInfo method, object[] arguments)
            {
                string value = arguments[0].ToString();
                return value + "是今天的面包";
            }
        }
    }

    6.编写Door.cs

    namespace SpringNetMethodDi
    {
        public delegate string OpenHandler(string arg);
    
        public class Door
        {
            public event OpenHandler OpenTheDoor;
    
            public void OnOpen(string arg)
            {
    
                if (OpenTheDoor != null)
                {
                    Console.WriteLine(OpenTheDoor(arg));
                }
            }
        }
    }

    7.编写Men.cs

    namespace SpringNetMethodDi
    {
        public class Men
        {
            public string OpenThisDoor(string arg)
            {
                return "参数是:" + arg;
            }
        }
    }

    8.编写App.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <sectionGroup name="spring">
          <section name="context" type="Spring.Context.Support.ContextHandler,Spring.Core"/>
          <section name="objects" type="Spring.Context.Support.DefaultSectionHandler,Spring.Core"/>
        </sectionGroup>
      </configSections>
    
      <spring>
        <context>
          <resource uri="config://spring/objects"></resource>
        </context>
        <objects xmlns="http://www.springframework.net">
          <!--01抽象方法注入-->
          <object name="sendTool" type="SpringNetMethodDi.SendTool,SpringNetMethodDi"></object>
          <object name="mobile" type="SpringNetMethodDi.Mobile,SpringNetMethodDi">
            <lookup-method name="GetSendTool" object="sendTool"/>
          </object>
          <!--02替换方法-->
          <object name="replaceValue" type="SpringNetMethodDi.SuperMarket,SpringNetMethodDi"></object>
          <object name="realOp" type="SpringNetMethodDi.RealOp,SpringNetMethodDi">
            <replaced-method name="Buy" replacer="replaceValue">
              <arg-type match="String"/>
            </replaced-method>
          </object>
          <!--03事件注入-->
          <object id="door" type="SpringNetMethodDi.Door,SpringNetMethodDi"></object>
          <object id="men" type="SpringNetMethodDi.Men,SpringNetMethodDi">
            <listener event="OpenTheDoor" method="OpenThisDoor">
              <ref object="door"/>
            </listener>
          </object>
    
        </objects>
      </spring>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
    </configuration>

    9.控制台代码

    namespace SpringNetMethodDi
    {
        class Program
        {
            static void Main(string[] args)
            {
                IApplicationContext context = ContextRegistry.GetContext();
                Mobile mobile = context.GetObject("mobile") as Mobile;
                mobile.GetSendTool().WeChat();
    
                RealOp op = context.GetObject("realOp") as RealOp;
                Console.WriteLine(op.Buy("面包"));
    
                Door door = context.GetObject("door") as Door;
                door.OnOpen("Opening");
                Console.ReadKey();
            }
        }
    }

    四、备注

    今天又掉进坑了,具体什么坑看问题汇总

  • 相关阅读:
    Linux性能优化之CPU优化(一)
    MongoDB CPU使用较高,如何排查?
    MongoDB 安全配置
    open-falcon v0.2 监控部署记录
    有关redis相关的性能优化及内存说明
    kafka 基础知识梳理
    Java 进程占用 VIRT 虚拟内存超高的问题研究
    【nodejs】文件上传demo实现
    translate和position的比较
    setAttribute()、getAttribute()与ele[attr]与自定义属性
  • 原文地址:https://www.cnblogs.com/kimisme/p/5346436.html
Copyright © 2011-2022 走看看