zoukankan      html  css  js  c++  java
  • AOP入门

    一 AOP

    Aspect-Oriented Programming(面向方面编程,AOP),如果我们基于面向对象的思想开发软件,一切皆是对象,而对于对象内部则无能为力。AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓 “方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

    二 AOP framework

    http://sourceforge.net/projects/aopnet/

    http://www.postsharp.org/

    http://www.aspectc.org/ 

    三 基于postsharp的实例

    1)参考:http://www.sharpcrafters.com/postsharp/documentation/getting-started 

    2)QuickTraceAttribute.cs

    using System;
    using System.Collections.Generic;
    using System.Text;
    using PostSharp.Aspects;

    namespace Trace
    {
        [Serializable]
        
    public sealed class QuickTraceAttribute : OnMethodBoundaryAspect
        {
            
    private string enteringMessage, leavingMessage;

            
    public override void CompileTimeInitialize(System.Reflection.MethodBase method, AspectInfo aspectInfo)
            {
                
    string methodName = method.DeclaringType.FullName + "." + method.Name;
                
    this.enteringMessage = "Entering " + methodName;
                
    this.leavingMessage = "Leaving " + methodName;
            }

            
    public override void OnEntry(MethodExecutionArgs args)
            {
                System.Diagnostics.Trace.WriteLine( 
    this.enteringMessage);
                System.Diagnostics.Trace.Indent();
            }

            
    public override void OnExit(MethodExecutionArgs args)
            {
                System.Diagnostics.Trace.Unindent();
                System.Diagnostics.Trace.WriteLine( 
    this.leavingMessage );
            }

            
    public override void OnException(MethodExecutionArgs args)
            {
                System.Diagnostics.Trace.Unindent();
                System.Diagnostics.Trace.WriteLine(
    this.leavingMessage + " with exception: " +
                    args.Exception.Message 
    + Environment.NewLine + args.Exception.ToString());
            }
        }
    }

    3)Program.cs

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;

    // apply quick trace attribute to all methods from 'mscorlib' and 'system.threading.*'
    [assembly: Trace.QuickTrace(AttributeTargetAssemblies = "mscorlib", AttributeTargetTypes = "System.Threading.*")]

    namespace Trace
    {
        
    class Program
        {
            
    static void Main(string[] args)
            {
                System.Diagnostics.Trace.Listeners.Add( 
    new System.Diagnostics.TextWriterTraceListener( Console.Out ) );

                Method1();
            }

            [QuickTrace]
            
    static void Method1()
            {
                Method2();
            }

            [QuickTrace]
            
    static void Method2()
            {
                Method3();
            }

            [QuickTrace]
            
    static void Method3()
            {
                Thread.Sleep( 
    10 );
            }
        }
    }

    4)结果

      

    完!


    作者:iTech
    微信公众号: cicdops
    出处:http://itech.cnblogs.com/
    github:https://github.com/cicdops/cicdops

  • 相关阅读:
    如何设置ASP.NET页面的运行超时时间
    日志文件清理工具V1.1
    【原创】日志文件清理工具V1.0
    【分享】国外后台界面HTML源码 [免费]
    【分享】仿东软OA协同办公服务管理源码
    年底发福利了——分享一下我的.NET软件开发资源
    由12306动态验证码想到的ASP.NET实现动态GIF验证码(附源码)
    【分享】元旦送礼,商业源码免费赠送!
    给大家分享一个jQuery TAB插件演示
    【分享】双12了,也没啥可送大家的,就送大家点商业源码吧!
  • 原文地址:https://www.cnblogs.com/itech/p/1763793.html
Copyright © 2011-2022 走看看