Unity拦截行为不会被召唤

时间:2015-10-20 11:22:10

标签: c# unity-container

我使用unity,我喜欢使用InterceptionBehavior进行日志记录。当我将InterceptionBehavior添加到类型regestration时,没有任何事情发生,并且没有调用InterceptionBehavior。

这是行为类:

public class Logger : IInterceptionBehavior
{
    public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
    {
        Console.WriteLine("Methode {0} wurde aufgerufen",input.MethodBase.Name);
        return getNext.Invoke().Invoke(input, getNext);
    }

    public IEnumerable<Type> GetRequiredInterfaces()
    {
        return Type.EmptyTypes;
    }

    public bool WillExecute => true;
}

类型注册:

container.RegisterType<IParser, Parser>(
    new Interceptor(new InterfaceInterceptor()), 
    new InterceptionBehavior(new Logger()));

container.RegisterType<IBerechne, Berechne>(
    new Interceptor(new InterfaceInterceptor()),
    new InterceptionBehavior(new Logger()));

2 个答案:

答案 0 :(得分:1)

您需要为Unity容器启用拦截。默认情况下不启用

container.AddNewExtension<Interception>();

另见Interception using Unity

答案 1 :(得分:0)

添加新扩展程序并确保您的界面为public

var container = new UnityContainer();
container.AddNewExtension<Interception>();
container.RegisterType<IParser, Parser>(
            new Interceptor<InterfaceInterceptor>(), 
            new InterceptionBehavior<Logger>());