• ASP.NET Core-使用AspNetCore实现AOP


    引用 AspectCore.Extensions.DependencyInjection 

    class Program
        {
            //Nuget:  AspectCore.Extensions.DependencyInjection
            static void Main(string[] args)
            {
                ServiceCollection services = new ServiceCollection();
                services.AddDynamicProxy();
                services.AddTransient<IMySql, MySql>();
                var provider = services.BuildAspectInjectorProvider();
                var mysql = provider.GetService<IMySql>();
                Console.WriteLine(mysql.GetData(5));
                Console.WriteLine(mysql.GetData(5));
                Console.WriteLine(mysql.GetData(5));
                Console.ReadKey();
            }
        }
        //记录日志AOP
        public class MyLogInterceptorAttribute : AbstractInterceptorAttribute
        {
            public override Task Invoke(AspectContext context, AspectDelegate next)
            {
                Console.WriteLine("方法之前记录日志-----");
                Task t = next(context);
                Console.WriteLine("方法之后记录日志-----");
                return t;
            }
        }
        //缓存AOP
        public class CacheInterceptorAttribute : AbstractInterceptorAttribute
        {
            private Dictionary<string, object> _cacheDict = new Dictionary<string, object>();
            public override Task Invoke(AspectContext context, AspectDelegate next)
            {
                string name = context.Proxy.ToString();
                string keyName = context.ProxyMethod.Name +"_"+ string.Join("_", context.Parameters);
                if (_cacheDict.ContainsKey(keyName))
                {
                    context.ReturnValue = _cacheDict[keyName];
                    return Task.CompletedTask;
                }
                Task t = next(context);
                _cacheDict[keyName] = "cache:"+context.ReturnValue;
                return t;
            }
        }
    
        public interface IMySql
        {
            string GetData(int id);
        }
        public class MySql : IMySql
        {
            //[MyLogInterceptor]
            [CacheInterceptor]
            public string GetData(int id)
            {
                Console.WriteLine("执行方法");
                return "mysql 返回 id=1 的姓名是张三";
            }
        }

    未完待续...

  • 相关阅读:
    Java 基础练习:控制台画圆,画等腰三角,乘法表
    Java 控制台五子棋游戏
    Java浮点数转化为人民币读法字符串
    Java Arrays类的用法
    Java javadoc使用
    Android 使用Camera2 调用摄像头显示预览与拍照
    SSRS: How to Display Checkbox on Report
    ADFS部署过程中设置network service对证书的读取权限
    Dynamics CRM2013 ScLib::AccessCheckEx failed
    ADFS3.0 Customizing the AD FS Sign-in Pages
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12246735.html
Copyright © 2020-2023  润新知