我试图在我的项目中使用ninject拦截来记录异常。在线
public override void Load()
{
this.Bind<IPoShippingRepository>().To<PoShippingRepository>().Intercept().With<ExceptionInterceptor>();
}
我有一个错误:
加载Ninject组件IAdviceFactory时出错
没有这样的组件已在内核的组件容器中注册。
建议:
1)如果您为KernelBase创建了自定义子类,请确保已正确实现AddComponents()方法。
2)确保没有通过调用RemoveAll()从容器中删除组件
3)确保您没有意外创建多个内核。
Ninject初始化很简单:
private static IKernel _kernel;
public UnitOfWork()
{
_kernel = new StandardKernel(new DomainNinjectModule());
}
...
public class DomainNinjectModule : NinjectModule
{
public override void Load()
{
this.Bind<IPoShippingRepository>().To<PoShippingRepository>().Intercept().With<ExceptionInterceptor>();
}
}
class ExceptionInterceptor : IInterceptor
{
private eKindOfLog _kindOfLog;
public ExceptionInterceptor(eKindOfLog kindOfLog)
{
_kindOfLog = kindOfLog;
}
public void Intercept(IInvocation invocation)
{
try
{
invocation.Proceed();
}
catch (Exception ex)
{
switch (_kindOfLog)
{
case eKindOfLog.Sql:
SimpleLog.LogSqlError(ex);
break;
case eKindOfLog.Error:
SimpleLog.LogSqlError(ex);
break;
}
}
}
}
我安装了Ninject.dll,Ninject.Extensions.Interception.dll和Ninject.Extensions.Interception.DynamicProxy.dll。 我使用拦截属性的方法是public和virtual。 请帮助我做错了什么?