在现代软件开发中,C#动态代理是一种强大的技术,它允许我们在运行时创建代理对象,从而实现如日志记录、权限验证、性能监控等横切关注点的统一处理。而 Castle DynamicProxy 是 .NET 平台上最流行、最成熟的动态代理库之一。本文将手把手教你如何使用 Castle DynamicProxy 实现 动态代理实现,即使是编程小白也能轻松上手!
动态代理是指在程序运行时动态生成一个类或对象,该代理对象可以拦截对目标对象方法的调用,并在调用前后插入自定义逻辑。这种机制是实现 C# AOP编程(面向切面编程)的核心技术。

打开你的 Visual Studio 项目,在 NuGet 包管理器中执行以下命令:
Install-Package Castle.Core注意:Castle DynamicProxy 是 Castle.Core 的一部分,无需单独安装其他包。
我们先创建一个简单的服务接口和其实现:
public interface ICalculator{ int Add(int a, int b); int Multiply(int a, int b);}public class Calculator : ICalculator{ public int Add(int a, int b) { Console.WriteLine($"正在计算 {a} + {b}"); return a + b; } public int Multiply(int a, int b) { Console.WriteLine($"正在计算 {a} * {b}"); return a * b; }}拦截器是动态代理的核心,它决定了在方法调用前后执行什么逻辑。我们需要实现 Castle 的 IInterceptor 接口:
using Castle.DynamicProxy;public class LoggingInterceptor : IInterceptor{ public void Intercept(IInvocation invocation) { // 方法调用前 var methodName = invocation.Method.Name; var args = string.Join(", ", invocation.Arguments); Console.WriteLine($"[日志] 开始调用方法: {methodName}({args})"); // 执行原始方法 invocation.Proceed(); // 方法调用后 var returnValue = invocation.ReturnValue; Console.WriteLine($"[日志] 方法 {methodName} 返回: {returnValue}"); }}现在,我们将使用 Castle 的 ProxyGenerator 来创建带拦截器的代理对象:
using Castle.DynamicProxy;class Program{ static void Main(string[] args) { // 创建代理生成器 var proxyGenerator = new ProxyGenerator(); // 创建原始对象 var calculator = new Calculator(); // 创建带拦截器的代理 var proxy = proxyGenerator.CreateInterfaceProxyWithTarget<ICalculator>( calculator, new LoggingInterceptor() ); // 调用代理方法 var result1 = proxy.Add(3, 5); var result2 = proxy.Multiply(4, 7); Console.WriteLine($"最终结果: Add={result1}, Multiply={result2}"); }}执行上述代码,你将看到如下输出:
[日志] 开始调用方法: Add(3, 5)正在计算 3 + 5[日志] 方法 Add 返回: 8[日志] 开始调用方法: Multiply(4, 7)正在计算 4 * 7[日志] 方法 Multiply 返回: 28最终结果: Add=8, Multiply=28可以看到,我们的日志逻辑成功地“环绕”了原始方法的执行,而原始代码完全没有修改——这正是 C# AOP编程 的魅力所在!
如果你需要代理一个类(而不是接口),只需确保类中的方法是 virtual 的,并使用 CreateClassProxy 方法:
public class Calculator{ public virtual int Add(int a, int b) // 必须是 virtual { return a + b; }}// 创建类代理var proxy = proxyGenerator.CreateClassProxy<Calculator>(new LoggingInterceptor());通过本教程,你已经掌握了如何使用 Castle DynamicProxy 实现 C#动态代理。这项技术不仅能让你的代码更干净、更模块化,还能轻松实现日志、缓存、事务等通用功能。无论是构建企业级应用还是学习 动态代理实现 原理,Castle DynamicProxy 都是一个值得掌握的利器。
赶快动手试试吧!你可以尝试添加性能计时、异常处理等更多拦截器,深入体验 C# AOP编程 的强大能力。
本文由主机测评网于2025-12-13发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025126966.html