【发布时间】:2011-11-02 01:16:15
【问题描述】:
在我的应用程序中,我之前使用常规 C# 属性来“注释”一个方法。例如:
[Foo(SomeKey="A", SomeValue="3")]
[Foo(SomeKey="B", SomeValue="4")]
public void TheMethod()
{
SpecialAttributeLogicHere();
}
SpecialAttributeLogicHere() 所做的是反思性地查看注释此特定方法的所有 Foo 属性。然后它将(自行)为所有键和值创建自己的字典。
我现在正尝试转移到 PostSharp,因为可以将 SpecialAttributeLogic 放入一个方面(并从更简洁的方法主体中删除!),在 OnEntry 中。 Foo 将替换为扩展 OnMethodBoundaryAspect 的方面。
我还是想通过以下方式使用它:
[Foo(SomeKey="A", SomeValue="3")]
[Foo(SomeKey="B", SomeValue="4")]
但是如果 Foo 有一个 OnEntry,这意味着“SpecialAttributeLogic”将被执行两次。我基本上需要将每个 Foo() 中的所有键和值“收集”到一个字典中,然后我对其应用一些逻辑。
如何使用 PostSharp 做到这一点(或最佳实践)?谢谢!
【问题讨论】:
-
在我下面的答案中添加了工作示例。