0

各メソッドまたはクラスに属性タグを手動で追加することなく、プロジェクトの多くの場所でメソッドを実行するすべての側面を探しています。

私のソリューション全体には、約 20 の個別のプロジェクトがあります。私が作成した 1 つは、私の属性宣言を保持する 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 つのプロジェクト、コントローラーとリポジトリ内に保持されているすべてのメソッドに追加することでした。

これら 2 つの他のプロジェクトを Attributes プロジェクトを参照するように設定しました。[TraceLoggingAttribute] タグを Controller および Repositories プロジェクト内のクラスとメソッドに配置すると、属性は完全に正常に機能します。

探している方法で GlobalAspects.cs を設定する方法はありますか? ここで問題を十分に説明していない場合は、質問してください

参考までに、TraceLoggingAttribute は次のように定義されています。

namespace myname.space.Attributes
{
    [MulticastAttributeUsage(MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Instance)]
    [Serializable]
    public class TraceLoggingAttribute : OnMethodBoundaryAspect
    {
4

1 に答える 1

0

残念ながら、属性は現在コンパイルされているアセンブリ (または TargetAssembly プロパティを介して他のアセンブリへの呼び出しに適用されますが、現在コンパイルされているアセンブリのみに影響します) にのみ適用できます。

最も簡単な解決策は、GlobalAspects.cs を影響を受けるすべてのプロジェクトにリンクすることだと思います。これは期待どおりに機能し、問題は発生しません。

それが役立つことを願っています。

于 2013-03-29T13:31:17.803 に答える