首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ninject中的无效操作异常:“加载Ninject组件IAdviceRegistry时出错”

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

Stack Overflow用户
提问于 2014-07-03 11:59:44
回答 2查看 1.4K关注 0票数 1

我在webforms应用程序中使用带有Ninject.Extension.Factory 3.2.0.0的Ninject 3.2.0.0。

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

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

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

在Ninject.Components.ComponentContainer.Get(Type组件),在c:\Projects\Ninject\ninject\src\Ninject\Components\ComponentContainer.cs:line 162中,在c:\Projects\Ninject\ninject\src\Ninject\Components\ComponentContainer.cs:line 116中,在Ninject.Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.ShouldProxy(IContext上下文中),在c:\Projects\Ninject\ninject.extensions.interception\src\Ninject.Extensions.Interception\Activation\Strategies\ProxyActivationStrategy.cs:line 66中,在Ninject。Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.Deactivate(IContext上下文,在c:\Projects\Ninject\ninject.extensions.interception\src\Ninject.Extensions.Interception\Activation\Strategies\ProxyActivationStrategy.cs:line 51at Ninject.Activation.Pipeline.<>c__DisplayClass6.b__4(IActivationStrategy s)、c:\Projects\Ninject\ninject\src\Ninject\Activation\Pipeline.cs:line 72at Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.MapT、c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:line 31at Ninject.Activation.Pipeline.Deactivate(IContext context中的InstanceReference引用),c:\Projects\Ninject\ninject\src\Ninject\Activation\Pipeline.cs:line 74中的Ninject.Activation.Caching.Cache.Forget(CacheEntry条目中的InstanceReference引用) Ninject.Activation.Caching.Cache.Forget(IEnumerable`1中的c:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs:line 254中的Ninject.Activation.Caching.Cache.Clear(对象作用域)中的c:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs:line 240中的InstanceReference引用在Ninject.Activation.Caching.Cache.<>c__DisplayClass3.b__1(Object o的:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs:line 198,e)在c:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs:line 94中的Ninject.Activation.Blocks.ActivationBlock.Dispose(Boolean配置)在c:\Projects\Ninject\ninject\src\Ninject\Activation\Blocks\ActivationBlock.cs:line 59中在Ninject.Infrastructure.Disposal.DisposableObject.Dispose()中在c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Disposal\DisposableObject.cs:line 33中在Brightspot.WebApi.Ioc.NinjectDependencyScope.Dispose()中在System.Net.Http.HttpRequestMessageExtensions.DisposeRequestResources(HttpRequestMessage请求中)

EN

回答 2

Stack Overflow用户

发布于 2014-07-03 12:56:03

确保扩展

  • 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可能会破坏一些东西。

票数 0
EN

Stack Overflow用户

发布于 2014-07-07 21:32:25

最后,我发现我们使用工厂模式的issue.If将功能模块加载到一个对象中。使用工厂模式时,功能模块未正确加载。因此,您需要在一个对象中加载功能模块。并使用标准内核访问工厂类...

代码语言:javascript
复制
this.Kernel.Load(new[] { new FuncModule() });
StandardKernel.Get<IApproveContextFactory>()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24544685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档