3

私はpostsharp1.5とOnMethodBoundaryAspectのアスペクトに取り組んでいます。アスペクトにデフォルトで次の動作をさせたい:

1-属性がクラスレベルで使用される場合、アスペクトはPUBLICメソッドにのみ適用されます。

2-アスペクトのユーザーは、アスペクトをプライベートメソッドまたは保護されたメソッドに入れることができます。

この[MulticastAttributeUsage(MulticastTargets.Method、TargetMemberAttributes = MulticastAttributes.Public)]を使用すると、ポイント1は機能しますが、互換性がないため、ケース2はビルドされません。

次に、次を使用してみました。AttributeTargetTypeAttributes = MulticastAttributes.Public; アスペクトのコンストラクターにありますが、機能しません。

事前にどうもありがとうございました。

4

2 に答える 2

5

残念ながら、SINGLEアスペクトクラスを使用して要件を実装する方法はありません。

次の3つのアスペクトクラスを使用できます。

public abstract class MyAspect : OnMethodBoundaryAspect
{
}

[MulticastAttributeUsage(..., 
      TargetMembersAttributes = MulticastAttributes.Public )]
[AttributeUsage(AttributeTargets.Class)]
public class ClassLevelAspect : MyAspect
{
}

[MulticastAttributeUsage(..., 
     TargetMembersAttributes = MulticastAttributes.NonPublic )]
[AttributeUsage(AttributeTargets.Method)]
public class MethodLevelAspect : MyAspect
{
}

-ゲール

于 2010-03-24T12:36:45.530 に答える
0

別の可能なアプローチは、アスペクトを動的に提供するIAspectProviderを使用することです。

このようなアスペクトを作成するためのサンプル。通常のメソッドとコンストラクターにさまざまなアスペクトを注入するものは、アスペクトプロバイダーに関するPostSharpトレーニングにあります。

あなたの場合、提供されたサンプルを使用でき、「ReflectedType.IsPublic」条件に基づいて、注入するアスペクトを決定します。

于 2012-04-24T07:47:21.953 に答える