千家信息网

如何进行C#实现AOP微型框架基础的分析

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,如何进行C#实现AOP微型框架基础的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在向大家详细介绍C#实现AOP微型框架之前,首先让
千家信息网最后更新 2025年01月31日如何进行C#实现AOP微型框架基础的分析

如何进行C#实现AOP微型框架基础的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

在向大家详细介绍C#实现AOP微型框架之前,首先让大家了解下微型框架的.cs文件,然后全面介绍C#实现AOP微型框架。

在前面的系列文章中,我介绍了消息、代理与AOP的关系,这次将我自己用C#实现AOP微型框架拿出来和大家交流一下。

AOP的最基本功能就是实现特定的预处理和后处理,我通过代理让C#实现AOP微型框架。先来看看构成此微型框架的.cs文件。

1. AopProxyAttribute AOP代理特性

  1. using System;

  2. using System.Runtime.Remoting ;

  3. using System.Runtime.Remoting.Proxies ;

  4. namespace EnterpriseServerBase.Aop

  5. {

  6. /// <summary>

  7. /// AopProxyAttribute

  8. /// AOP代理特性,如果一个类想实现具体的AOP,
    只要实现AopProxyBase和IAopProxyFactory,然后加上该特性即可。

  9. /// 2005.04.11

  10. /// summary>

  11. [AttributeUsage(AttributeTargets.Class ,AllowMultiple = false)]

  12. public class AopProxyAttribute : ProxyAttribute

  13. {

  14. private IAopProxyFactory proxyFactory = null ;

  15. public AopProxyAttribute(Type factoryType)

  16. {

  17. this.proxyFactory = (IAopProxyFactory)Activator.CreateInstance(factoryType) ;

  18. }

  19. #region CreateInstance

  20. /// <summary>

  21. /// 获得目标对象的自定义透明代理

  22. /// summary>

  23. public override MarshalByRefObject CreateInstance(Type serverType)

  24. //serverType是被AopProxyAttribute修饰的类

  25. {

  26. //未初始化的实例的默认透明代理

  27. MarshalByRefObject target = base.CreateInstance (serverType);

  28. //得到位初始化的实例(ctor未执行)

  29. object[] args = {target ,serverType} ;

  30. //AopProxyBase rp = (AopProxyBase)Activator.CreateInstance(this.realProxyType ,args) ;

  31. //Activator.CreateInstance在调用ctor时通过了代理,所以此处将会失败

  32. //得到自定义的真实代理

  33. AopProxyBase rp = this.proxyFactory.CreateAopProxyInstance(target ,serverType) ;

  34. //new AopControlProxy(target ,serverType) ;

  35. return (MarshalByRefObject)rp.GetTransparentProxy() ;

  36. }

  37. #endregion

  38. }

  39. }

2 .MethodAopSwitcherAttribute.cs

  1. using System;

  2. namespace EnterpriseServerBase.Aop

  3. {

  4. /// <summary>

  5. /// MethodAopSwitcherAttribute
    用于决定一个被AopProxyAttribute修饰的class的某个特定方法是否启用截获 。

  6. /// 创建原因:绝大多数时候我们只希望对某个类的一部分Method而不是所有Method使用截获。

  7. /// 使用方法:如果一个方法没有使用MethodAopSwitcherAttribute
    特性或使用MethodAopSwitcherAttribute(false)修饰,

  8. ///  都不会对其进行截获。只对使用了MethodAopSwitcherAttribute(true)启用截获。

  9. /// 2005.05.11

  10. /// summary>

  11. [AttributeUsage(AttributeTargets.Method ,AllowMultiple = false )]

  12. public class MethodAopSwitcherAttribute : Attribute

  13. {

  14. private bool useAspect = false ;

  15. public MethodAopSwitcherAttribute(bool useAop)

  16. {

  17. this.useAspect = useAop ;

  18. }

  19. public bool UseAspect

  20. {

  21. get

  22. {

  23. return this.useAspect ;

  24. }

  25. }

  26. }

  27. }

看完上述内容,你们掌握如何进行C#实现AOP微型框架基础的分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0