在同一类中的嵌套方法调用未触发Ninject拦截



我是Ninject的新手,我正在尝试在一个类中截取两个方法。第一个方法被截获。第一个方法调用第二个方法,但后者不触发拦截器。

有解决方案吗?

这里有一些代码:

public interface IJobMonitor
{
    void Run();
    JobCheck ManageJob(JobCheck job);
}
[LogAround]
public class JobMonitor : IJobMonitor {
  public virtual void Run(){
    //boilerplate
    var job = ManageJob(new JobCheck());
  }
  public virtual JobCheck ManageJob(JobCheck job) {
    //lots of good stuff
  }
}
public class LogAroundAttribute : InterceptAttribute
{
    public override IInterceptor CreateInterceptor(IProxyRequest request)
    {
        return request.Kernel.Get<LogAroundInterceptor>();
    }
}
public class LogAroundInterceptor : IInterceptor
{
    private readonly ILogger _logger;
    public LogAroundInterceptor(ILogger logger)
    {
        _logger = logger;
    }
    public void Intercept(IInvocation invocation)
    {
        var methodName = invocation.Request.Method.Name;
        try
        {
            var message = string.Format("Method {0} called", methodName);

            _logger.Info(message);
            invocation.Proceed();
            var endMessage = String.Format("Method {0} completed", methodName);
            _logger.Info(endMessage);
        }
        catch(Exception e)
        {
            var message = string.Format("Method {0} EXCEPTION occured: {1} ", methodName, e);
            _logger.Fatal(message);
            throw;
        }
    }
}

这是代理实现的一个限制。代理基本上是一个包裹目标的动态类(对象(。在运行时,目标的所有用户都在访问代理,而不是目标。CCD_ 1将最终将呼叫转发到目标。当目标对自身调用方法时,。。。目标方法是直接调用的,而不需要经过代理和拦截器。

您可以做的是调整您的实现,这样您就不需要拦截目标在目标上调用的方法。您可以将该方法提取到另一个类中,然后代理并拦截该类。

相关内容

  • 没有找到相关文章

最新更新