У меня есть Ninject, Ninject.Extensions.Interception и Ninject.Extensions.Interception.DynamicProxy, установленные через NuGet, и у меня есть следующий модуль
public class InterceptAllModule : InterceptionModule
{
public override void Load()
{
Kernel.Intercept(p => (true)).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());
Я получил следующую ошибку,
Could not load type 'Castle.Proxies.Func`1Proxy' from assembly 'DynamicProxyGenAssembly2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=a621a9e7e5c32e69' because the parent type is sealed.
В основном я пытаюсь вести журнал для своего приложения ASP.NET MVC всякий раз, когда вызывается метод действия. Я хочу регистрировать определенные вещи. Но не знаю, как обойти эту ошибку. Может ли кто-нибудь с опытом указать, что я делаю неправильно, пожалуйста? Спасибо.
p => (true)
означает «перехватывать все», и теперь Ninject пытается перехватить запечатанный тип. Вы регистрируете конкретный (герметичный) типAsSelf()
? - person Steven   schedule 27.12.2012p
. - person Steven   schedule 28.12.2012