0

「C# Visual Studio 2008.net を使用して」アスペクト クラスとターゲット クラスを作成しましたが、アプリケーションを実行してそれらを織り交ぜるたびに、ターゲット クラスのみが実行されましたが、アスペクト クラスを実行できませんでした。レイピア ルームへの参照を添付しようとしました。 rapier-loom をアンインストールして再インストールしようとしましたが、同じ問題が発生します....何が問題なのですか?

これはアスペクトクラスです:

using System;

using Loom;

using Loom.JoinPoints;

namespace HelloAspect
 {

    public class TraceAspect : Aspect
    {
      [Loom.JoinPoints.IncludeAll]
      [Call(Advice.Around)]

      public T Trace<T>([JPContext]Context ctx, params object[] args)
      {
        Console.WriteLine(ctx.Instance + "." + ctx.CurrentMethod.Name + " called");

        ctx.Invoke(args);
        return default(T);
      }
    }

 }

これは適用方法です:

using System;

using Loom;

using Loom.JoinPoints;


 namespace HelloAspect
 {

    class Program
    {
       static void Main(string[] args)
       {
          string name;
          Console.Write("Your name: ");
          name = Console.ReadLine();
          TraceAspect aspect1 = new TraceAspect();
          Target target = Loom.Weaver.Create<Target>(aspect1);
          target.Hello(name);
          Console.ReadLine();
       }
    }
 
 }

ターゲット クラスは次のとおりです。

public class Target
{
    public virtual void Hello(string name)
    {
        Console.WriteLine("Hello {0}!", name);
    
    }
    
}
4

1 に答える 1

1

ToString()問題は、呼び出しを介してアドバイス メソッドから Target クラスのメソッドを暗黙的に呼び出すことですctx.Instance。ToString もアドバイス メソッドによって織り交ぜられているため、これは無限の再帰につながります。

于 2012-03-11T08:54:34.560 に答える