通过C#中的属性获取有关装饰成员的信息

时间:2009-07-15 02:21:20

标签: c# reflection attributes

我需要知道属性是否有任何方式(或另一种不同的方法)知道有关为他装饰的内容。例如:

class Cat
{
    public Cat() { }

    [MyAttribute]
    public House House { get; set; }
}

MyAttribute里面我必须对房屋对象进行一些预处理......

class MyAttribute : Attribute
{
    public MyAttribute() 
    {
        var ob = // Discover the decorated property, do some changes and set it again
    }
}

我不知道这是否是更好的方式,如果它确实可以完成,

2 个答案:

答案 0 :(得分:3)

这不是属性的工作方式。它们只是添加到某些东西的编译时元数据。他们自己没有完成任何事情。在运行时,代码可以使用该元数据来执行操作。

更新:基本上,据我所知,您正在努力完成两件事。第一种是告诉存储库不要加载一些属性。属性可用于此目的,但存储库代码应使用实体类型的反射,并在第一时间查看它不应加载的内容。第二件事是你希望第一次调用属性。你需要在每次通话时检查它是否已经加载,并在第一次调用时加载它。这可以通过手动插入这样的代码或使用PostSharp之类的代码来实现,后者处理代码并通过查看属性自动注入方法调用。也许这就是你首先要求的。

答案 1 :(得分:1)

你想要的是EntLib中的Policy Injection application block

  

开发人员可以使用该策略   注入应用程序块以指定   对象的横切行为   一套政策的条款。一项政策   是一系列的组合   客户端代码执行时的处理程序   调用类和-with的方法   基于属性的例外   策略 - 一系列匹配规则   选择类和类   成员(方法和属性)来   应用程序块附加的内容   处理程序。