我正在寻找一种在项目中的许多地方运行方法的方法,而不必手动将属性标记添加到每个方法或类中。
我的整个解决方案包含大约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
{
答案 0 :(得分:0)
不幸的是,您只能将属性应用于当前编译的程序集(或通过TargetAssembly属性调用其他程序集,但这也仅影响当前编译的程序集)。
我认为最简单的解决方案是将GlobalAspects.cs链接到您希望受其影响的所有项目。这应该按照您的预期工作,不会造成任何问题。
希望有所帮助。