• (二)远程代理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;
                }
            }
        }
  • 相关阅读:
    shell 表达式
    manjaro 换源到中国并按照速度排序
    ORA-01950:对表空间 'USERS' 无权限
    normal 普通身份 sysdba 系统管理员身份 sysoper 系统操作员身份 dba和sysdba
    学生选课数据库SQL语句练习题
    多线程编程
    补充知识点
    输入输出
    集合作业
    银行(1)0925
  • 原文地址:https://www.cnblogs.com/chenh/p/9918406.html
Copyright © 2020-2023  润新知