每次调用我们的 ASP.NET WebApi 控制器的一种操作方法时,我们公司都需要记录某些事情。由于我们现在将 Ninject 用于 DI,因此我们也希望将它用于此目的。这是我到目前为止所尝试的。
我通过 NuGet 安装了 Ninject、Ninject.Extensions.Interception 和 Ninject.Extensions.Interception.DynamicProxy,并且我有以下模块
public class InterceptAllModule : InterceptionModule
{
public override void Load()
{
Kernel.Intercept(p => p.Request.Service.Name.EndsWith("Controller")).With(new TimingInterceptor());
}
}
TimingInterceptor 在哪里
public class TimingInterceptor : SimpleInterceptor
{
readonly Stopwatch _stopwatch = new Stopwatch();
protected override void BeforeInvoke(IInvocation invocation)
{
_stopwatch.Start();
}
protected override void AfterInvoke(IInvocation invocation)
{
_stopwatch.Stop();
string message = string.Format("[Execution of {0} took {1}.]",invocation.Request.Method,_stopwatch.Elapsed);
Log.Info(message + "\n");
_stopwatch.Reset();
}
}
现在,当我尝试将模块与 ninject 内核连接并运行我的站点时
var kernel = new StandardKernel(new InterceptAllModule());
但是,每当有一个调用进入其中一个操作方法时,它都会抛出一个错误说
Cannot instantiate proxy of class: MyApiController.
有经验的人可以指出我做错了什么吗?谢谢。