Ninject拦截投掷错误。动态代理

时间:2016-02-12 06:28:38

标签: ninject interceptor

我有一个我用来引导的课程。 作为对象创建的一部分,我按惯例使用它来绑定接口。

一切正常,直到我尝试添加拦截器。

public class ContainerBootstrapper : IDisposable
    {
        StandardKernel _c;

        public ContainerBootstrapper()
        {
            _c =new StandardKernel();

            _c.Bind(b => b.FromAssembliesMatching("Facade*.*").SelectAllClasses().BindDefaultInterfaces()); 
            _c.Bind(b => b.FromAssembliesMatching("Object*.*").SelectAllClasses().BindDefaultInterfaces());
            _c.Bind(b => b.FromAssembliesMatching("Logger*.*").SelectAllClasses().BindDefaultInterfaces());

//even using the built in ActionInterceptor like this:

_c.Intercept(c => true)
            .With(new ActionInterceptor(invocation =>
                    Console.Write(invocation.Request.Method.Name)));

当这一行被命中时,我收到一个错误 - 加载Ninject组件IAdviceFactory时出错 没有在内核的组件容器中注册这样的组件。

建议:   1)如果您为KernelBase创建了自定义子类,请确保您已正确使用      实现了AddComponents()方法。   2)确保没有通过调用RemoveAll()从容器中删除组件。   3)确保您没有意外创建多个内核。

我在顶部:

using Ninject.Extensions.Conventions;
using Ninject.Extensions.Interception.Injection.Dynamic;
using Ninject.Extensions.Interception.Infrastructure.Language;
using Ninject.Extensions.Interception;

并使用NuGet包。试过动态代理和LinFu。两者都给出了同样的错误。

任何人都有任何想法尝试? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

事实证明,即使我有一个对引导项目的引用,我认为我所有的dinject自动复制的dll都不是这样的。手动移动它后就可以了。