Первоначально я использовал некоторый собственный код, который я нашел для обработки разрешения зависимостей в веб-API, и он работал нормально. Проблема, с которой я столкнулся, заключалась в том, что я хотел привязать фильтр к своим областям контроллера так же, как вы можете с MVC. Например, Ядро.BindFilter. Новый пакет Ninject.We.WebApi имеет расширение привязки, которое мне нужно, но как только я добавляю его в свой проект, я получаю следующую ошибку. Я не меняю свой код, просто ссылаюсь на DLL.
Ошибка при активации IFilterProvider с помощью привязки IFilterProvider к DefaultFilterProvider Обнаружена циклическая зависимость между конструкторами двух служб.
Путь активации: 3) Внедрение зависимости IFilterProvider в параметр defaultFilterProviders конструктора типа DefaultFilterProviders 2) Внедрение зависимости DefaultFilterProviders в параметр filterProviders конструктора типа DefaultFilterProvider 1) Запрос IFilterProvider
Предложения: 1) Убедитесь, что вы не объявили зависимость для IFilterProvider от каких-либо реализаций службы. 2) Рассмотрите возможность объединения сервисов в один, чтобы убрать цикл. 3) Используйте внедрение свойств вместо внедрения конструктора и реализуйте IInitializable, если вам нужно, чтобы логика инициализации выполнялась после ввода значений свойств.
в Ninject.Activation.Context.Resolve() в Ninject.KernelBase.‹>c__DisplayClass15.b__f(привязка IBinding) в System.Linq.Enumerable.WhereSelectListIterator
2.MoveNext() at System.Linq.Enumerable.<CastIterator>d__b1
1.MoveNext() в System.Linq.Enumerable.d__142.MoveNext() at System.Collections.Generic.List
1..ctor(источник IEnumerable1 collection)
1 ) в Ninject.Web.WebApi.Filter.DefaultFilterProvider.GetFilters(конфигурация HttpConfiguration, дескриптор действия HttpActionDescriptor) в System.Web.Http.Controllers.HttpActionDescriptor.b__0(IFilterProvider fp) в System.Linq.Enumerable.d__14
at System.Linq.Enumerable.ToList[TSource](IEnumerable2.MoveNext() at System.Linq.Buffer
1..ctor(IEnumerable1 source) at System.Linq.OrderedEnumerable
1. d__0.MoveNext() в исходном коде System.Linq.Buffer1..ctor(IEnumerable
1) в System.Linq.Enumerable.d__a01.MoveNext() at System.Web.Http.Controllers.HttpActionDescriptor.<RemoveDuplicates>d__3.MoveNext() at System.Linq.Buffer
1..ctor(IEnumerable1 source) at System.Linq.Enumerable.<ReverseIterator>d__a0
1.MoveNext() в коллекции System.Collections.Generic.List1..ctor(IEnumerable
1)
в System.Linq.Enumerable. ToList[TSource](IEnumerable1 source) at System.Web.Http.Controllers.HttpActionDescriptor.InitializeFilterPipeline() at System.Lazy
1.CreateValue() --- Конец трассировки стека из предыдущего места, где было выдано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() в System.Lazy`1.get_Value() в Система.W eb.Http.Controllers.HttpActionDescriptor.GetFilterPipeline()
в System.Web.Http.Controllers.HttpActionDescriptor.GetFilterGrouping()
в System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken CancellationToken) в System .Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore (запрос HttpRequestMessage, CancellationToken CancellationToken) в System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()