Наша компания имеет необходимость регистрировать определенные вещи каждый раз, когда вызывается один из наших методов действий наших контроллеров ASP.NET WebApi. Поскольку мы используем Ninject для DI прямо сейчас, мы также хотели бы использовать его для этой цели. Это то, что я пробовал до сих пор.
У меня есть Ninject, Ninject.Extensions.Interception и Ninject.Extensions.Interception.DynamicProxy, установленный через NuGet, и у меня есть следующий модуль
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.
Может ли кто-нибудь с опытом указать, что я делаю неправильно? Спасибо.