• Aop之使用Castle动态代理实现对方法的拦截


    using System;
    using System.Linq;
    using Castle.DynamicProxy;
    
    namespace AopTest
    {
        class AopTest
        {
            static public void Test()
            {
                var proxyGenerator = new ProxyGenerator();
                IUserService user = proxyGenerator.CreateClassProxy<UserService>(new UserRigthCheckProxy());
                user.GetUser("admin");
                user.GetUser("guest");
                user.UpdateUser("admin");
                user.UpdateUser("guest");
            }
        }
    
        public interface IUserService
        {
            void GetUser(string userId);
            void UpdateUser(string userId);
        }
    
        public class UserService : IUserService
        {
            public virtual void GetUser(string userId)
            {
                Console.WriteLine(userId + ",Welcome!");
            }
            public virtual void UpdateUser(string userId)
            {
                Console.WriteLine(userId + ",Updated!");
            }
        }
    
        public class UserRigthCheckProxy : IInterceptor
        {
            private static readonly string[] RightOperations = new string[] { "UpdateUser" };
            public void Intercept(IInvocation invocation)
            {
                if (invocation.Arguments.Length > 0 && invocation.Arguments[0] is string)
                {
                    if (RightOperations.Contains(invocation.Method.Name))
                    {
                        var userId = (string) invocation.Arguments[0];
                        if (userId == "admin")
                        {
                            Console.WriteLine("有权限操作 ");
                            invocation.Proceed();
                        }
                        else
                        {
                            Console.WriteLine("{0},您没有权限操作", userId);
                        }
                    }
                    else
                    {
                        Console.WriteLine("有权限操作 ");
                        invocation.Proceed();
                    }
                }
                else
                {
                    invocation.Proceed();
                }
            }
        }
    }
  • 相关阅读:
    [Codeup 25482]选美
    [Codeup 25481] swan
    暑假集训D12总结
    [技术]浅谈重载操作符
    2020年寒假第6次学*进度记录
    2020年寒假第5次学*进度记录
    2020年寒假第4次学*进度记录
    “家庭记账本”软件开发(1)
    阅读《梦断代码》随笔(1)
    2020年寒假第三次学*进度记录
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/8073880.html
Copyright © 2020-2023  润新知