1

我在 webforms 应用程序中使用 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 组件):c:\Projects\Ninject\ 中 Ninject.Components.ComponentContainer.GetT 的第 162 行ninject\src\Ninject\Components\ComponentContainer.cs:C:\Projects\Ninject\ninject.extensions.interception\src\Ninject 中 Ninject.Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.ShouldProxy(IContext context) 的第 116 行。 Extensions.Interception\Activation\Strategies\ProxyActivationStrategy.cs:C:\Projects\Ninject\ninject.extensions.interception\src 中 Ninject.Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.Deactivate(IContext context, InstanceReference reference) 的第 66 行\Ninject.Extensions.Interception\Activation\Strategies\ProxyActivationStrategy.cs:Ninject.Activation 的第 51 行。Pipeline.<>c__DisplayClass6.b__4(IActivationStrategy s) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Pipeline.cs:Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[T](IEnumerable) 中的第 72 行1 series, Action1 个动作)在 c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:第 31 行 Ninject.Activation.Pipeline.Deactivate(IContext context, InstanceReference reference) in c:\Projects\Ninject\ ninject\src\Ninject\Activation\Pipeline.cs:C:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs 中 Ninject.Activation.Caching.Cache.Forget(CacheEntry entry)的第 74 行: C:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs 中 Ninject.Activation.Caching.Cache.Forget(IEnumerable`1 cacheEntries) 的第 254 行:Ninject.Activation.Caching.Cache 的第 240 行.Clear(Object scope) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs:Ninject.Activation.Caching.Cache 的第 198 行。<>c__DisplayClass3.b__1(Object o, EventArgs e ) 在 c 中:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs: 第 94 行 Ninject.Activation.Blocks.ActivationBlock.Dispose(Boolean disposing) in c:\Projects\Ninject\ninject\src\Ninject\Activation \Blocks\ActivationBlock.cs:C:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Disposal\DisposableObject.cs 中 Ninject.Infrastructure.Disposal.DisposableObject.Dispose() 的第 59 行:Brightspot.WebApi 的第 33 行。 Ioc.NinjectDependencyScope.Dispose() 在 System.Net.Http.HttpRequestMessageExtensions.DisposeRequestResources(HttpRequestMessage 请求)\Projects\Ninject\ninject\src\Ninject\Infrastructure\Disposal\DisposableObject.cs:System.Net.Http.HttpRequestMessageExtensions.DisposeRequestResources(HttpRequestMessage 请求)处 Brightspot.WebApi.Ioc.NinjectDependencyScope.Dispose() 的第 33 行\Projects\Ninject\ninject\src\Ninject\Infrastructure\Disposal\DisposableObject.cs:System.Net.Http.HttpRequestMessageExtensions.DisposeRequestResources(HttpRequestMessage 请求)上 Brightspot.WebApi.Ioc.NinjectDependencyScope.Dispose() 的第 33 行

4

2 回答 2

0

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

this.Kernel.Load(new[] { new FuncModule() });
StandardKernel.Get<IApproveContextFactory>()
于 2014-07-07T13:32:24.500 回答
0

确保扩展名

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

扩展名

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

存在。

编辑:

的注册IAdviceRegistryInterceptionModuleninject.extensions.interception 扩展的一部分。

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

如果您在StandardKernel不修改任何设置的情况下使用,您应该很好。然而,改变INinjectSettings.LoadExtensions = false或改变INinjectSettings.ExtensionSearchPatterns会破坏事物。

于 2014-07-03T04:56:02.637 回答