2009-07-15 28 views
2

我需要知道是否有任何方式(或另一个不同的方法)属性知道什么是他正在装饰什么。例如:通过C#中的属性获取有关装饰成员的信息

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 
    } 
} 

我不知道这是否是更好的办法,既不如果它实际上可以做到的,

回答

3

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

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

+0

那么这里的正确方法是什么? – Alaor 2009-07-15 02:27:08

+0

也许,您应该提及您的实际问题以获得最佳解决方案。更清楚的是,*你首先想要完成什么? – 2009-07-15 02:36:12

1

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

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