Код класса аспекта не может быть переплетен с кодом класса цели в Rapier-LOOM - PullRequest
0 голосов
/ 27 декабря 2011

Я написал класс аспекта и целевой класс «с использованием C # Visual Studio 2008.net», но каждый раз, когда я запускаю приложение для их переплетения, выполняется только целевой класс, но я не могу выполнить класс аспекта, к которому я пытался прикрепить ссылкиRapier-Loom и попытался удалить 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);

    }

}

1 Ответ

1 голос
/ 11 марта 2012

Проблема в том, что вы неявно вызываете метод ToString() класса Target из вашего метода advice через вызов ctx.Instance.Это приведет к бесконечной рекурсии , потому что ToString также переплетается методом рекомендации.

...