带属性的ninject拦截

时间:2016-12-30 14:18:12

标签: attributes ninject interception

我试图在我的项目中使用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。 请帮助我做错了什么?

0 个答案:

没有答案