zoukankan      html  css  js  c++  java
  • Spirng.net 替换任意方法

    1.首先上客户端代码

     static void Main(string[] args)
            {
                IApplicationContext ctx = ContextRegistry.GetContext();
                Console.WriteLine("替换方法");
                UserDao dao = (UserDao)ctx.GetObject("userDao");
                Console.WriteLine(dao.GetValue("Liu Dong"));
                Console.WriteLine();
    }

    这里说明下当你执行GetValue这个方法的时候由配置文件将其另外一个方法

    代码如下:

    public class UserDao
        {
            //虚方法
            public virtual string GetValue(string input)
            {
                return null;
            }
        }

        //实现IMethodReplacer接口
        public class ReplaceValue : IMethodReplacer
        {
            public object Implement(object target, MethodInfo method, object[] arguments)
            {
                string value = (string)arguments[0];
                return "获取到:" + value;
            }
        }

    //注意就像上面说到的当执行GetvALUE方法的时候,会被替换为实现了IMethodReplacer这个接口的Implement方法,里面拥有被替换前其方法的几个参数

    object[] arguments 之前未被替换前的方法的参数数组 ,MehthodInfo 方法的名称,哪个对象的方法被替换 这里假设就是x对象 而x=target

    最后上配置文件 (最后上配置文件的原因就为了让我们在此之前先明白此次博客的意图在于替换方法,并且是如何替换的)

          <!--替换方法-->
          <object id="userDao" type="SpringNet_MethodDi.UserDao, SpringNet_MethodDi">
     <replaced-method name="GetValue" replacer="replaceValue"> <!--userDao这个对象执行Getvalue这个方法的时候,调用信息传递给 replacevalue这个对象并在-->               <!--Implement方法里执行方法的替换 -->
              <arg-type match="String"/>
            </replaced-method>
          </object>
          <object id="replaceValue" type="SpringNet_MethodDi.ReplaceValue, SpringNet_MethodDi"/>   <!--replaceValue类必须实现IMethodReplacer接口 -->

  • 相关阅读:
    Linux编程之自定义消息队列
    MVC5学习系列--Razor视图(一)
    JS将秒转换为 天-时-分-秒
    自己封装了一个EF的上下文类.,分享一下,顺便求大神指点
    VS2015企业版,社区版,专业版详细对比
    [干货来袭]C#6.0新特性
    WebApp上滑加载数据...
    用SignalR 2.0开发客服系统[系列5:使用SignalR的中文简体语言包和其他技术点]
    用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]
    用SignalR 2.0开发客服系统[系列3:实现点对点通讯]
  • 原文地址:https://www.cnblogs.com/kexb/p/4574043.html
Copyright © 2011-2022 走看看