source/Repid.Core/Aop/ServiceProxy.cs

(完整代码) 1KB

using Repid.Utility.Helper;
using System;
using System.Runtime.Remoting.Messaging;
using System.Runtime.Remoting.Proxies;

namespace Repid.Core.Aop
{
    public class ServiceProxy<T> : RealProxy where T : AopTarget
    {
        private T _target;

        public ServiceProxy(T target) : base(typeof(T))
        {
            this._target = target;
        }

        public void PreProceede(IMessage msg)
        {
            _target.PreProceede();
        }

        public void PostProceede(IMessage msg)
        {
            _target.PostProceede();
        }

        public override IMessage Invoke(IMessage msg)
        {
            try
            {
                PreProceede(msg);

                IMethodCallMessage mcm = msg as IMethodCallMessage;
                object[] args = mcm.Args;
                object returnValue = mcm.MethodBase.Invoke(this._target, args);

                return new ReturnMessage(returnValue, args, args.Length, mcm.LogicalCallContext, mcm);
            }
            catch (Exception ex)
            {
                Exception mcmEx = ex.InnerException;
                LogHelper.Error(_target, mcmEx, mcmEx.Message);

                return new ReturnMessage(ex, msg as IMethodCallMessage);
            }
            finally { PostProceede(msg); }
        }
    }
}

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。