dotNetCore v3-日志拦截和缓存拦截

using AspectCore.DynamicProxy;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Threading.Tasks;
using AspectCore.Extensions.DependencyInjection;
using System.Collections.Generic;

namespace MyConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {

            ServiceCollection service = new ServiceCollection();
            //注册服务
            //service.AddDynamicProxy();旧的方法
            service.ConfigureDynamicProxy();
            service.AddTransient<IMySql, MySql>();
            //var provider = service.BuildAspectCoreServiceProvider();旧的方法
            var provider = service.BuildDynamicProxyProvider();

            var mysql = provider.GetService<IMySql>();
            //走业务逻辑
            var msg = mysql.GetData(10);
            Console.WriteLine(msg);
            //走缓存
            msg = mysql.GetData(10);
            Console.WriteLine(msg);


            Console.Read();

        }
    }

    /// <summary>
    /// 日志切面
    /// </summary>
    public class MyLogInterceptorAttribute : AbstractInterceptorAttribute
    {

        public override Task Invoke(AspectContext context, AspectDelegate next)
        {
            Console.WriteLine("开始记录日志");
            var task = next(context);
            Console.WriteLine("结束记录日志");

            return task;
        }
    }

    /// <summary>
    /// 缓存切面
    /// </summary>
    public class MyCacheInterceptorAttribute : AbstractInterceptorAttribute
    {
        private Dictionary<string, string> cacheDict = new Dictionary<string, string>();
        public override Task Invoke(AspectContext context, AspectDelegate next)
        {
            var cacheKey = string.Join(",",context.Parameters);
            if (cacheDict.ContainsKey(cacheKey))
            {
                context.ReturnValue = cacheDict[cacheKey].ToString();
                return Task.CompletedTask;
            }
            var task = next(context);
            var cacheValue = context.ReturnValue;
            cacheDict.Add(cacheKey,string.Format("from cache:{0}", cacheValue.ToString()));
            return task;
        }
    }

    public interface IMySql
    {
        string GetData(int id);
    }

    public class MySql : IMySql
    {
        [MyLogInterceptor]
        [MyCacheInterceptor]
        public string GetData(int id)
        {
            var msg = $"已经获取到数据id={id}的数据";
            Console.WriteLine(msg);
            return msg;
        }
    }
}
 

发布了446 篇原创文章 · 获赞 71 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/dxm809/article/details/104179944
今日推荐