Ninject中的操作异常无效:"加载Ninject组件时出错IAdviceRegistry"

时间:2014-07-03 03:59:44

标签: ninject ninject.web.mvc ninject-extensions ninject-interception

我在网络表单应用程序中使用Ninject 3.2.0.0和Ninject.Extension.Factory 3.2.0.0。

我收到以下错误报告......

加载Ninject组件IAdviceRegistry时出错 没有这样的组件已经在内核的组件容器中注册。

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

在C:\ Projects \ Ninject \ ninject \ src \ Ninject \ Components \ ComponentContainer.cs中的Ninject.Components.ComponentContainer.Get(Type组件):第162行    在C:\ Projects \ Ninject \ ninject \ src \ Ninject \ Components \ ComponentContainer.cs中的Ninject.Components.ComponentContainer.GetT:第116行    在C:\ Projects \ Ninject \ ninject.extensions.interception \ src \ Ninject.Extensions.Interception \ Activation \ Strategies \ ProxyActivationStrategy.cs中的Ninject.Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.ShouldProxy(IContext context):第66行    在C:\ Projects \ Ninject \ ninject.extensions.interception \ src \ Ninject.Extensions.Interception \ Activation \ Strategies \ ProxyActivationStrategy.cs中的Ninject.Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.Deactivate(IContext context,InstanceReference reference) :第51行    在Ninject.Activation.Pipeline。<> c__DisplayClass6.b__4(IActivationStrategy s)在c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Pipeline.cs:第72行    在Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map [T](IEnumerable 1 series, Action 1 action)c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Infrastructure \ Language \ ExtensionsForIEnumerableOfT.cs:第31行    在Ninject.Activation.Pipeline.Deactivate(IContext context,InstanceReference reference)中的c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Pipeline.cs:第74行    在C:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Caching \ Cache.cs中的Ninject.Activation.Caching.Cache.Forget(CacheEntry条目):第254行    在Ninject.Activation.Caching.Cache.Forget(IEnumerable`1 cacheEntries)中的c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Caching \ Cache.cs:第240行    在C:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Caching \ Cache.cs中的Ninject.Activation.Caching.Cache.Clear(对象范围):第198行    at Ninject.Activation.Caching.Cache。<> c__DisplayClass3.b__1(Object o,EventArgs e)位于c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Caching \ Cache.cs:第94行    at Ninject.Activation.Blocks.ActivationBlock.Dispose(布尔处理)在c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Blocks \ ActivationBlock.cs:第59行    在Ninject.Infrastructure.Disposal.DisposableObject.Dispose()在c:\ Projects \ Ninject \ ninject \ src \ Ninject \ Infrastructure \ Disposal \ DisposableObject.cs:第33行    at Brightspot.WebApi.Ioc.NinjectDependencyScope.Dispose()    在System.Net.Http.HttpRequestMessageExtensions.DisposeRequestResources(HttpRequestMessage request)

2 个答案:

答案 0 :(得分:0)

确保扩展程序

  • ninject.extensions.interception
  • Ninject.Extensions.Interception.DynamicProxy

扩展程序

  • ninject.extensions.interception
  • Ninject.Extensions.Interception.Linfu

在场。

编辑:

IAdviceRegistry的注册是ninject.extensions.interception扩展的InterceptionModule的一部分。

因此扩展未正确加载。 这可能是因为扩展dll未正确复制到输出路径/部署路径或(很可能是问题),或者您已将内核配置为不自动加载扩展/未正确执行。

如果您在不修改任何设置的情况下使用StandardKernel,那么您应该很好。但是,更改INinjectSettings.LoadExtensions = false或更改INinjectSettings.ExtensionSearchPatterns可能会破坏事情。

答案 1 :(得分:0)

最后我发现了这个问题。如果我们使用工厂模式加载ninject中的功能模块。使用工厂模式时,功能模块未正确加载。所以你需要在ninject中加载功能模块..并使用标准内核访问工厂类...

this.Kernel.Load(new[] { new FuncModule() });
StandardKernel.Get<IApproveContextFactory>()