Unity InterceptionBehavior不被调用

本文关键字:调用 InterceptionBehavior Unity | 更新日期: 2023-09-27 18:18:25

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

下面是Behavior类:

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

Unity InterceptionBehavior不被调用

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

container.AddNewExtension<Interception>();

参见使用Unity进行拦截

添加新的扩展并确保您的界面是public:

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