zoukankan      html  css  js  c++  java
  • (二)远程代理Remoting/RealProxy

    使用.Net Remoting/RealProxy

    采用TransparentProxy和RealProxy实现对象的代理,实现思路如下:Client -TransparentProxy - RealProxy - Target Object

    下面实现自定义的TransparentProxy和RealProxy

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Remoting.Messaging;
    using System.Runtime.Remoting.Proxies;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MyRealProxyApplication
    {
        public class MyRealProxy<T> : RealProxy
        {
            private T _target;
            public MyRealProxy(T target)
                : base(typeof(T))
            {
                this._target = target;
            }
            public override IMessage Invoke(IMessage msg)
            {
                PreProceede(msg);
                IMethodCallMessage callMessage = (IMethodCallMessage)msg;
                object returnValue = callMessage.MethodBase.Invoke(this._target, callMessage.Args);
                PostProceede(msg);
                return new ReturnMessage(returnValue, new object[0], 0, null, callMessage);
            }
            public void PreProceede(IMessage msg)
            {
                Console.WriteLine("方法执行前");
            }
            public void PostProceede(IMessage msg)
            {
                Console.WriteLine("方法执行后");
            }
        }
        
    }
    using System;
    
    namespace MyRealProxyApplication
    {
        public static class TransparentProxy
        {
            public static T Create<T>()
            {
                T instance = Activator.CreateInstance<T>();
                MyRealProxy<T> realProxy = new MyRealProxy<T>(instance);
                T transparentProxy = (T)realProxy.GetTransparentProxy();
                return transparentProxy;
            }
        }
    }

    用户注册接口和实现

     public interface IUserProcessor
        {
            void RegUser(User user);
        }
    
     public void RegUser(User user)
            {
                Console.WriteLine("用户已注册。");
            }
    
    public class User
        {
            public string Name{get;set;}
            public string PassWord{get;set;}
     
        }

    客户端调用

    public class Transfer
        {
            public static void Run()
            {
                try
                {
                    User user = new User() { Name = "lee", PassWord = "123123123123" };
                    UserProcessor userprocessor = TransparentProxy.Create<UserProcessor>();
                    userprocessor.RegUser(user);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
  • 相关阅读:
    memcached整理の基本使用
    memcached整理の编译
    linux命令の删除文件和文件夹 复制粘贴文件和文件夹
    ANSIBLE工具
    RSYNC服务
    FTP服务
    Mac运维安装软件
    WebSocket协议
    TCP三次握手和四次挥手、HTTP协议
    GITBOOK/HEXO TRAVIS GITHUB-PAGES 博客搭建
  • 原文地址:https://www.cnblogs.com/chenh/p/9918406.html
Copyright © 2011-2022 走看看