zoukankan      html  css  js  c++  java
  • 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();
                }
            }
        }
    }
  • 相关阅读:
    【Cookie】java.lang.IllegalArgumentException An invalid character [32] was present in the Cookie value
    【会话技术】Cookie技术 案例:访问时间
    进程池
    管道和Manager模块(进程之间的共享内容)
    队列
    锁Lock,信号量Semaphore,事件机制Event
    multiprocess模块
    进程
    reduce
    struct模块
  • 原文地址:https://www.cnblogs.com/zhshlimi/p/8073880.html
Copyright © 2011-2022 走看看