• 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  下载,运行效果如下图:




  • 相关阅读:
    新浪微博OAuth2授权错误 error:redirect_uri_mismatch
    [Eclipse]自动注释功能
    android 官网访问不了
    [转]Java开发中的23种设计模式详解
    [转]JAVA Iterator 的用法
    [转] Java集合类详解
    MySQL(root用户)密码重置
    SpringMVC项目接入Springfox实战遇到的问题集合
    linux中mysql完整卸载命令操作
    linux-centos挂载新硬盘操作
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/2275492.html
Copyright © 2020-2023  润新知