我正在寻找一种方法,在我的项目中的许多地方,所有方面都可以在方法上运行,而不必手动将属性标记添加到每个方法或类中。
我的整个解决方案包含大约 20 个单独的项目。我创建了一个名为 myname.space.Attributes 的文件,其中包含我的属性声明,以及一个名为 GlobalAspects 的文件,其中包含以下内容:
using PostSharp.Patterns.Diagnostics;
using PostSharp.Extensibility;
using myname.space.Attributes;
// This file contains registration of aspects that are applied to several classes of this project.
[assembly: TraceLoggingAttribute(AttributeTargetTypes = "myname.space.Controllers.*",
AttributeTargetTypeAttributes = MulticastAttributes.AnyVisibility,
AttributeTargetMemberAttributes = MulticastAttributes.AnyVisibility)
]
[assembly: TraceLoggingAttribute(AttributeTargetTypes = "myname.space.Repositories.*",
AttributeTargetTypeAttributes = MulticastAttributes.AnyVisibility,
AttributeTargetMemberAttributes = MulticastAttributes.AnyVisibility)
]
这样做的目的是将我的 TraceLoggingAttribute 添加到其他 2 个项目(控制器和存储库)中的所有方法中。
我已经设置了这两个其他项目来引用 Attributes 项目,如果我将 [TraceLoggingAttribute] 标记放在 Controller 和 Repositories 项目中的类和方法上,该属性就可以正常工作。
有没有一种方法可以让我的 GlobalAspects.cs 以我正在寻找的方式工作?如果我在这里没有很好地解释这个问题,请提问
出于兴趣,TraceLoggingAttribute 定义为:
namespace myname.space.Attributes
{
[MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
[Serializable]
public class TraceLoggingAttribute : OnMethodBoundaryAspect
{