Недопустимое исключение операции в 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, Action
1 действие) в 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
может сломать вещи.