Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方面类代码可以';在剑杆织机中不能与目标类代码交织_C#_Aspect_Rapier Loom - Fatal编程技术网

C# 方面类代码可以';在剑杆织机中不能与目标类代码交织

C# 方面类代码可以';在剑杆织机中不能与目标类代码交织,c#,aspect,rapier-loom,C#,Aspect,Rapier Loom,我“使用C#Visual Studio 2008.net”编写了aspect类和目标类,但每次我运行应用程序将它们交织在一起时,只执行目标类,但我无法执行aspect类,我尝试将引用附加到rapier Lowe,并尝试卸载rapier Lowe并再次安装,但出现了相同的问题……问题是什么有问题吗 这是aspect类: 问题是,您通过ctx.Instance调用从advice方法隐式调用了目标类的ToString()方法。这将导致无休止的递归,因为ToString也由advice方法交织在一起 u

我“使用C#Visual Studio 2008.net”编写了aspect类和目标类,但每次我运行应用程序将它们交织在一起时,只执行目标类,但我无法执行aspect类,我尝试将引用附加到rapier Lowe,并尝试卸载rapier Lowe并再次安装,但出现了相同的问题……问题是什么有问题吗

这是aspect类:
问题是,您通过
ctx.Instance
调用从advice方法隐式调用了目标类的
ToString()
方法。这将导致无休止的递归,因为ToString也由advice方法交织在一起

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);
    
    }
    
}