第一次AOP,附上使用DEMO,可用在简单生产环境了

本文介绍了一个基于ApectBaseAttribute特性的示例,演示如何为接口方法添加时间记录功能,并通过AOP代理实现对方法调用前后的监控。文章包含完整的代码实现,并讨论了进一步完善的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

demo代码如下

 1     public class ConsoleTimeAttribute : ApectBaseAttribute
 2     {
 3         public override void Before(ApectContext apectContext)
 4         {
 5             apectContext.SetCorrelationObject(DateTime.Now);
 6             Console.WriteLine($"Before > Method:{apectContext.MethodName} > {DateTime.Now}");
 7         }
 8 
 9         public override void After(ApectContext apectContext)
10         {
11             Console.WriteLine($"Before > Method:{apectContext.MethodName}  > {DateTime.Now}");
12             Console.WriteLine($"CorrelationObject > {(DateTime)apectContext.CorrelationObject}");
13         }
14     }

先是继承ApectBaseAttribute的特性类,等会用;

1 public interface ITest
2     {
3         [ConsoleTime]//加了特性监控
4         void Say(string message);
5     }
    public class Test : ITest
    {
        private readonly string _init;

        public Test(string init)
        {
            _init = init;
        }

        public void Say(string message)
        {
            Console.WriteLine($"init : {_init} || message : {message}");
        }
    }

以下开始怎么使用AOP

var type = ApectProxyBuilder.BuildType<ITest>(typeof(Test));
ITest test = (ITest) Activator.CreateInstance(type,"ok");
test.Say("说点什么");

如果配合IOC就能完美使用,记得目前还是只能提供学习,还缺少AOP代理类里执行方法有返回值的返回,还有只代理非继承接口类的AOP处理。

如果有什么疑问和不妥之处欢迎多多交流,后期会运用到生产环境

2017.2.22 已经可用在简单生产环境了,使用当中有什么疑问,可联系我,联系信息在GIT库页面上有

GIT代码地址:https://git.oschina.net/ruanjianfeng/Ruan.Framework.Core

 

转载于:https://www.cnblogs.com/rjf1979/p/6422974.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值