分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

.net AOP Castle.Core

发布时间:2023-09-06 02:22责任编辑:彭小芳关键词:暂无标签

参考资料:http://www.cnblogs.com/zuowj/p/7501896.html

1、通过NuGet下载Castle.Core

2、创建代理类并继承StandardInterceptor

参考代码如下

using Castle.DynamicProxy;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication2{ ???public class TestInterceptor : StandardInterceptor ???{ ???????/// <summary> ???????/// 创建代理类 ???????/// </summary> ???????/// <typeparam name="T"></typeparam> ???????/// <returns></returns> ???????public static T CreateProxy<T>() where T : class ???????{ ???????????ProxyGenerator generator = new ProxyGenerator(); ???????????var testa = generator.CreateClassProxy<T>(new TestInterceptor()); ???????????return testa; ???????} ???????/// <summary> ???????/// 执行前 ???????/// </summary> ???????/// <param name="invocation"></param> ???????protected override void PreProceed(IInvocation invocation) ???????{ ???????????Console.WriteLine(invocation.Method.Name + "执行前,入参:" + string.Join(",", invocation.Arguments)); ???????} ???????/// <summary> ???????/// 执行中 ???????/// </summary> ???????/// <param name="invocation"></param> ???????protected override void PerformProceed(IInvocation invocation) ???????{ ???????????Console.WriteLine(invocation.Method.Name + "执行中"); ???????????try ???????????{ ???????????????base.PerformProceed(invocation); ???????????} ???????????catch (Exception ex) ???????????{ ???????????????Console.WriteLine(ex.ToString()); ???????????} ???????} ???????/// <summary> ???????/// 执行后 ???????/// </summary> ???????/// <param name="invocation"></param> ???????protected override void PostProceed(IInvocation invocation) ???????{ ???????????Console.WriteLine(invocation.Method.Name + "执行后,返回值:" + invocation.ReturnValue); ???????} ???}}
View Code

3、创建测试类

public class TestB ???{ ???????public virtual string GetResult() ???????{ ???????????string str = DateTime.Now + "TestB-GetResult"; ???????????Console.WriteLine(str); ???????????return str; ???????} ???????public virtual string GetResult2() ???????{ ???????????string str = DateTime.Now + "TestB-GetResult2"; ???????????Console.WriteLine(str); ???????????return str; ???????} ???}

4、使用AOP方式调用方法

TestInterceptor.CreateProxy<TestB>().GetResult();

重点:virtual 

Castle只会对virtual标记的虚方法进行代理

.net AOP Castle.Core

原文地址:https://www.cnblogs.com/jianghaidong/p/9964781.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved