Недопустимое исключение операции в Ninject: "Ошибка загрузки компонента Ninject IAdviceRegistry "

Я использую Ninject 3.2.0.0 с Ninject.Extension.Factory 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: строка 162 в Ninject.Components.ComponentContainer.GetT в c:\Projects\Ninject\ninject\src\Ninject\Components\ComponentContainer.cs: строка 116 в Ninject.Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.ShouldProxy(контекст IContext) в c:\Projects\Ninject\ninject.extensions.interception\src\Ninject.Extensions.Interception\Activation\Strategies\ProxyActivationStrategy.cs: строка 66 в Ninject.Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.Deactivate(контекст IContext, ссылка InstanceReference) в каталоге c: \ Projects \ Ninject \ ninject.extensions.interception \ Ninject.Extensions.Interception \ Activation \ Strategies \ ProxyActivationStrategy.cs: строка 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[Т] (IEnumerable 1 series, Action1 действие) в c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs: строка 31 в Ninject.Activation.Pipeline.Deactivate(контекст IContext, ссылка InstanceReference) в c:\Projects\Ninject\ninject\src\Ninject\Activation\Pipeline.cs: строка 74 в Ninject.Activation.Caching.Cache.Forget(запись CacheEntry) в c:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs: строка 254 в Ninject.Activation.Caching.Cache.Forget(IEnumerable`1 cacheEntries) в c:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs: строка 240 в Ninject.Activation.Caching.Cache..Clear(Объектная область) в c:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs: строка 198 в Ninject.Activation.Caching.Cache.<> C__DisplayClass3.b__1(Object o, EventArgs e) в c:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs: строка 94 в 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 в Brightspot.WebApi.Ioc.NinjectDependencyScope.Dispose() в System.Net.Http.HttpRequestMessageExtensions.DisposeRequestResources(запрос HttpRequestMessage)

2 ответа

Наконец, я обнаружил эту проблему. Если мы используем фабричный шаблон, загрузите функциональный модуль в ninject. Функциональный модуль не загружен должным образом при использовании заводского шаблона. Поэтому вам нужно загрузить функциональный модуль в ninject. И получить доступ к классу фабрики, используя стандартное ядро ​​...

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

Убедитесь, что расширения

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

или расширения

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

присутствуют.

РЕДАКТИРОВАТЬ:

Регистрация IAdviceRegistry является частью InterceptionModule расширения ninject.extensions.interception.

Таким образом, расширение загружено неправильно. Это связано либо с тем, что расширение dll не было правильно скопировано в выходной путь / путь развертывания, либо (что, скорее всего, проблема), либо вы настроили ядро ​​так, чтобы оно не загружало расширения / не делало это правильно.

Если вы используете StandardKernel без изменения каких-либо настроек вы должны быть хорошими. Однако меняется INinjectSettings.LoadExtensions = false или меняется INinjectSettings.ExtensionSearchPatterns может сломать вещи.

Другие вопросы по тегам