Unity拦截并不像预期的那样工作

时间:2016-09-13 01:59:34

标签: c# unity-container unity-interception

我使用unity作为我的aop框架,但它并没有像预期的那样工作。请检查下面的代码。

container.RegisterType<IPerson, Person>(new Interceptor<TransparentProxyInterceptor>(),
    new InterceptionBehavior<LoggingInterceptionBehavior>(), 
    new InjectionConstructor(container.Resolve<IPlay>(), container.Resolve<IEat>()));

var person = container.Resolve<IPerson>();
person.Play();
person.Eat();
((IAnimal)person).Sleep();
Console.Read();

public IMethodReturn Invoke(IMethodInvocation input,
       GetNextInterceptionBehaviorDelegate getNext)
{
    Console.WriteLine(string.Format("Invoking method {0} begin", input.MethodBase));
    var result = getNext()(input, getNext);
    if (result.Exception != null)
    {
        Console.WriteLine("{0} throws exception", input.MethodBase);
    }
    else
    {
        Console.WriteLine(string.Format("Invoking method {0} end", input.MethodBase));
    }
    return result;
}

当container.Resolve()和((IAnimal)人)运行时,行为也会执行,并打印出来

  

调用方法System.Type GetType()begin

     

调用方法System.Type GetType()end

我希望只在我明确调用方法时执行日志。怎么预防呢?

0 个答案:

没有答案