1

インターフェイスといくつかのポイントカットを導入できるようにする必要がある複雑な側面を実装する必要があります。これを行う方法がわかりません。

私の目標は、(装飾されたフィールドのイベント ハンドラーを介して) いくつかの動作を導入できるように、クラスのいくつかのフィールド セッターをインターセプトすることです。一部のデータを変換し、特定のインターフェイスで宣言されたイベントを発生させたいので、これらのフィールドを含むクラスにこのインターフェイスを導入したいと考えています。

最も単純な概念は、子のすべてのイベントをキャプチャし、それらをコンテナー クラスの単一の外部イベントに変換するコンテナーです。

したがって、LocationInterceptionAspect を使用してメソッド ポイントカットを導入する方法を知っています。

public override void OnSetValue(LocationInterceptionArgs args)
{
    // attach event handler to args.Value.SomeEvent,
}

また、InstanceLevelAspect を使用してインターフェイス/メソッドを導入する方法。

しかし、2つを1つの側面に組み合わせる方法ではありません。

LocationInterceptionAspect 内にインターフェイスまたはメンバーを単純に導入することはできません。スコープは、含まれている型ではなく場所であり、コンパイルされないためです。

これはいつでも 2 つの側面に分けることができますが、これは各側面が独立して機能しないことを意味し、両方が常に一緒に適用されるようにする必要があります。

4

1 に答える 1

1

OnLocationSetValueAdvice を (属性を介して) InstanceLevelAspect に追加できるようで、これは機能します。

[IntroduceInterface(typeof(IMyInterface)]
public class CustomAspect : InstanceLevelAspect
{
    [OnLocationSetValueAdvice]
    [MulticastPointcut(Targets = MulticastTargets.Field, Attributes = MulticastAttributes.Instance)]
    public void OnSetValue(LocationInterceptionArgs args)
    {
       ...
    }
}
于 2013-01-15T02:08:41.020 に答える