我在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请求中)
发布于 2014-07-03 12:56:03
确保扩展
或者扩展
都存在。
编辑:
IAdviceRegistry的注册是ninject.extensions.interception扩展的InterceptionModule的一部分。
因此,扩展没有正确加载。这要么是因为扩展dll没有正确复制到输出路径/部署路径,要么(很可能是问题),或者是您将内核配置为不自动加载扩展/不正确地执行该操作。
如果你使用的是StandardKernel而没有修改任何设置,你应该是很好的。然而,更改INinjectSettings.LoadExtensions = false或更改INinjectSettings.ExtensionSearchPatterns可能会破坏一些东西。
发布于 2014-07-07 21:32:25
最后,我发现我们使用工厂模式的issue.If将功能模块加载到一个对象中。使用工厂模式时,功能模块未正确加载。因此,您需要在一个对象中加载功能模块。并使用标准内核访问工厂类...
this.Kernel.Load(new[] { new FuncModule() });
StandardKernel.Get<IApproveContextFactory>()https://stackoverflow.com/questions/24544685
复制相似问题