zoukankan      html  css  js  c++  java
  • PostSharp AOP编程:3.PostSharp的LocationInterceptionAspect类基本组成

            在PostSharp中得LocationInterceptionAspect类是针对属性或字段的面向方面截取。继承与它的特性将可以截取初始化属性、设置属性、获取属性等时候的数据,并且可以在这几个过程中针对属性进行附加控制。

            这个类里面有三个主要的函数可以重载分别是RuntimeInitialize(LocationInfo locationInfo)、OnSetValue(LocationInterceptionArgs args)、OnGetValue(LocationInterceptionArgs args)。他们分别意义如下:

            RuntimeInitialize(LocationInfo locationInfo):初始化包含属性或字段的类的时候运行此函数,增加控制代码,可以截取到运行此属性或字段的类信息,属性类型等信息。

            OnSetValue(LocationInterceptionArgs args):设置属性或字段值的时候运行此函数,增加相关设置值时代码,可以获取到此属性值、属性名等相关信息。

            OnGetValue(LocationInterceptionArgs args)。获取属性或字段值的时候运行此函数。

            首先我们编写一个继承于LocationInterceptionAspect类的特性,并且重载相关函数如下代码:

        [Serializable]
    public class TestAspect : LocationInterceptionAspect
    {
    //当目标类初始化属性的时候运行此函数。
    public override void RuntimeInitialize(LocationInfo locationInfo)
    {
    //打印类名、属性或字段名、字段类型
    string name = locationInfo.DeclaringType.Name + "." +
    locationInfo.Name + " (" + locationInfo.LocationType.Name + ")"; ;
    Console.WriteLine(name);
    Console.WriteLine("A");
    System.Reflection.FieldInfo finfo = locationInfo.FieldInfo;
    }
    //设置属性的时候运行
    public override void OnSetValue(LocationInterceptionArgs args)
    {
    Console.WriteLine(args.LocationName);
    Console.WriteLine("B");
    base.OnSetValue(args);
    }
    //获取属性的时候运行
    public override void OnGetValue(LocationInterceptionArgs args)
    {
    Console.WriteLine("C");
    base.OnGetValue(args);
    }
    }

            其次我们编写一个目标类,此类中含有一个属性并且增加这个属性的特性如下代码所示:

        public class People
    {
    [TestAspect]
    public string Name { get; set; }
    }

            最后我们在客户端初始化People类并且设置属性和获取属性如下代码:

        class Program
    {
    static void Main(string[] args)
    {
    People p = new People();
    p.Name = "Mike1";
    Console.WriteLine(p.Name);
    Console.ReadLine();
    }

    }

            如需源码请点击 PostSharpField.rar  下载,运行效果如下图:




  • 相关阅读:
    mysql数据恢复
    数据库备份脚本
    SHELL syntax error:unexpected end of file 提示错误
    shell script 的追踪与 debug
    mysql Host ‘XXXXXX’ is blocked because of many connection errors
    linux下MySQL 5.6源码安装
    C# 数据库并发的解决方案(通用版、EF版)
    Thread(线程)四
    C#线程系列讲座(1):BeginInvoke和EndInvoke方法
    在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2275492.html
Copyright © 2011-2022 走看看