Подтвердить что ты не робот

Поддержка Ninject в ASP.NET MVC 6?

Я очень счастливо использовал Ninject в течение долгого времени, и мне это очень нравится, но перед выпуском ASP.NET 5 и MVC 6 я столкнулся с трудным выбором.

В принципе, вне ворот Microsoft обнаружила свою собственную систему впрыска зависимостей; Это тот, который, насколько мне известно, получил много критики. Но моя большая проблема заключается в том, как это влияет на другие библиотеки.

Из еще один вопрос, который я задал и другие ресурсы онлайн, кажется, что Ninject не работает из коробки с MVC 6. Хотя есть "решение", данное в виде подробной библиотеки Microsoft.Framework.DependencyInjection.Ninject and Ninject. Это даже сложнее, потому что для этой библиотеки требуется добавить https://www.myget.org/F/aspnetmaster/ в список NuGet.

Я проделал некоторое копание и нашел, где находится эта библиотека; Это выглядит хорошо, кажется, что все в порядке, что я могу сказать, но есть несколько вещей, которые беспокоят меня.

  • На самом деле, библиотека не кажется во главе с создателями Ninject
  • Библиотека похоронена довольно глубоко в неясном репозитории
  • В реальных ресурсах Ninject он никогда не упоминает об этом

В основном, я очень обеспокоен тем, что это какой-то банд-помощник, и поддержка Ninject (и даже других библиотек-контейнеров) вымирает. Есть ли скрытая информация, которую я просто не открываю?

4b9b3361

Ответ 1

  • На самом деле библиотека, по-видимому, не возглавляет Ninject Создатели

В этой библиотеке и, казалось бы, они также, посмотрите, что Microsoft создала образцы поставщиков инъекций зависимостей, которые были удален в бета-версии. Обратите внимание, что ссылка на DI в MVC 6, на которую ссылается ваш оригинальный вопрос, говорит, что следующее;

Эти адаптеры контейнера DI являются временными и доступны для справки; мы ожидаем, что в конечном итоге они будут удалены и заменены соответствующих владельцев контейнеров.

Как и должно быть. Microsoft не должна нести ответственность за поддержку сторонних поставщиков.

  • Библиотека похоронена довольно глубоко в неясном репозитории

Если вы не знаете, ASP.NET 5 все еще находится в разработке. Бета 7 доступна на nuget в качестве предварительного выпуска, но есть и другие источники, включая:

Эти источники поддерживаются Microsoft.

  • В реальных ресурсах Ninject он никогда не упоминает об этом

Как и в случае любой новой разработки, сторонние поставщики библиотеки сами должны определить, когда (если вообще) они будут обеспечивать реализацию своих продуктов, которые поддерживают новую кодовую базу. Для некоторых это будет считаться наиболее эффективным до тех пор, пока новая формация не будет официально выпущена, поскольку изменения в нарушении API по-прежнему весьма вероятны до этого момента. Будет ли поддержка реализована вообще, конечно, до ресурсов поставщиков и/или в случае сообщества с открытым исходным кодом.

Ответ 2

Между хранителями существующих библиотек DI ведется дискуссия о том, нужно ли создавать, поддерживать и поддерживать адаптер для новой встроенной системы DI ASP.NET. У поддерживающих Autofac подтверждено, что они будут создавать и поддерживать адаптер, а команда Ninject была silent и другие команды, такие как команда Simple Injector (включая меня) объяснили, что они не будут поддерживайте адаптер.

Лично я считаю, что встроенная библиотека DI ASP.NET Core - это хорошая и чистая библиотека DI, но она ограничена простыми приложениями. Как я объяснил здесь, многие функции, необходимые для разработки поддерживаемых приложений, основанных на принципах SOLID, не поддерживаются. Однако, как и библиотека Unity DI, сделанная пару лет назад, я думаю, что этот встроенный контейнер может заставить разработчиков начать использовать инъекцию зависимостей, что является победой для нашей отрасли.

Эти ограничения делают встроенный контейнер особенно подходящим для настройки и расширения самой системы ASP.NET. Для создания больших поддерживаемых приложений вам потребуется использовать другую библиотеку DI. Это, конечно, хорошо; вам нужно будет выбрать нужные инструменты для работы.

К сожалению, до сих пор команда ASP.NET публично публиковала , используя другую библиотеку ДИ, означает, что вам придется писать/используйте адаптер. К сожалению, это неправильное сообщение IMO, потому что большинство библиотек DI несовместимы с API, представленным встроенным контейнером (как я объяснил здесь и здесь). Только Autofac кажется разумно синхронизированным, что объясняет, почему команда Autofac предпочитает поддерживать адаптер. Но обратите внимание, что даже Autofac оказался несовместимым с абстракцией, которую Microsoft определила, и они (как и StructureMap) должны были сделать большие изменения до их продукт даже сможет соответствовать абстракции. И поддерживающие Autofac сильно расстроены относительно всего процесса и абстракции в целом. И, как я объяснил здесь, даже версия ASP.NET, реализованная адаптером Ninject, нарушена.

Это сообщение команды ASP.NET для использования адаптера - это ИМО большая ошибка, потому что это задушит инновации (в то время как сама библиотека ДИ не является, это просто еще одна библиотека ДИ). Команда ASP.NET продвигает модель, в которой как ваши прикладные компоненты, так и система ASP.NET(и все другие подсистемы, которые будут подключаться в будущем) будут зарегистрированы в вашем пользовательском контейнере. Гораздо разумнее и практично сохранять конфигурацию вашего приложения отдельно от конфигурации системы ASP.NET(как описано здесь).

Из-за этого я считаю использование адаптера для любого контейнера более бесполезным. Как я показал здесь, действительно легко подключить свой собственный контейнер DI, оставив его полностью отдельным от регистрации ASP.NET. Это означает, что вам не нужна поддержка Ninject для эффективного использования Ninject в проекте ASP.NET Core. Единственное, что нужно сделать Ninject, это создать версию, совместимую с .NET Core (в случае, если ваш продукт должен работать на этой новой платформе).

Итак, я не уверен, что поддержка "вымирает", хотя некоторые поддерживающие DI (например, команда Simple Injector и, возможно, Castle Windsor и Ninject) решили не строить, поддерживать и поддержка реализации адаптера для ядра ASP.NET, потому что она не нужна и находится только на пути.

ОБНОВЛЕНИЕ Ноябрь 2016

Я был обсуждать некоторые улучшения в ASP.NET Core с Microsoft, чтобы упростить плагин для контейнера, у которого нет адаптер (посмотрите на мой примерный репозиторий и особенно на Startup.cs из примера проекта Ninject), но до сих пор Microsoft, похоже, отстает от прогресса, потому что (как утверждает Фаулер) их "смещение к соответствующим контейнерам [] помутнение [их] видения ".