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;
                }
            }
        }
  • 相关阅读:
    通用js模块02:validutils.js
    通用js模块04:cookieUtils.js
    通用js模块03:formatutils.js
    通用js模块01:stringutils.js
    应用开发平台与代码生成工具感想
    linq to sql 中isnumeric的使用
    很惭愧啊
    错误:”未能加载文件或程序集“System.Web.Mvc, Version=2.0.0.0” 解决方法
    今天又温习了一下磁盘阵列的概念
    ashx的说明
  • 原文地址:https://www.cnblogs.com/chenh/p/9918406.html
Copyright © 2011-2022 走看看