我在网络表单应用程序中使用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)
答案 0 :(得分:0)
确保扩展程序
或扩展程序
在场。
编辑:
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>()