我需要知道属性是否有任何方式(或另一种不同的方法)知道有关为他装饰的内容。例如:
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
}
}
我不知道这是否是更好的方式,如果它确实可以完成,
答案 0 :(得分:3)
这不是属性的工作方式。它们只是添加到某些东西的编译时元数据。他们自己没有完成任何事情。在运行时,代码可以使用该元数据来执行操作。
更新:基本上,据我所知,您正在努力完成两件事。第一种是告诉存储库不要加载一些属性。属性可用于此目的,但存储库代码应使用实体类型的反射,并在第一时间查看它不应加载的内容。第二件事是你希望第一次调用属性。你需要在每次通话时检查它是否已经加载,并在第一次调用时加载它。这可以通过手动插入这样的代码或使用PostSharp之类的代码来实现,后者处理代码并通过查看属性自动注入方法调用。也许这就是你首先要求的。
答案 1 :(得分:1)
你想要的是EntLib中的Policy Injection application block。
开发人员可以使用该策略 注入应用程序块以指定 对象的横切行为 一套政策的条款。一项政策 是一系列的组合 客户端代码执行时的处理程序 调用类和-with的方法 基于属性的例外 策略 - 一系列匹配规则 选择类和类 成员(方法和属性)来 应用程序块附加的内容 处理程序。