В чем разница между DependencyResolver.SetResolver и HttpConfiguration.DependencyResolver в WebAPI

У меня есть существующий проект, который использует AutoFac как IoC.

В регистрационном коде у меня есть следующие строки:

var resolver = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(resolver)); config.DependencyResolver = new AutofacWebApiDependencyResolver(resolver); 

Итак, мой вопрос в чем разница между DependencyResolver.SetResolver и HttpConfiguration.DependecyResolver ? Почему я должен назначить их оба?

Предотвратите смешивание MVC и веб-API в одном проекте. Microsoft, похоже, предлагает это, потому что шаблон Visual Studio для Web API автоматически смешивает проект с MVC, но это плохая идея.

С архитектурной точки зрения MVC и веб-API совершенно разные. MVC – это технология пользовательского интерфейса, предназначенная для оптимизации работы конечных пользователей. Веб-API – это технология веб-сервисов, целью которой является оптимизация опыта для (клиентского) разработчика.

MVC и веб-API не используют какой-либо определенный код для представления. Смешение их в одном проекте просто делает этот проект более сложным и сложным.

Но, возможно, что еще более важно, оба типа приложений имеют свои собственные настройки конфигурации DI. У них есть свой собственный состав Root и смешение, что в одну конфигурацию DI (один контейнер DI) может сделать вашу конфигурацию необычайно жесткой.

И, наконец, смешивание веб-API с MVC в одном проекте приводит к болезненным неоднозначным конфликтам имен, поскольку сборки Web API содержат множество classов, которые разделяют то же имя, что и MVC-аналоги (но с немного разными реализациями).

Я предполагаю, что вы перепутались между MVC и Web API:

 DependencyResolver.SetResolver 

для MVC и принадлежит сборке System.Web.Mvc . В противном случае:

 Configuration.DependencyResolver 

для Web APi, он принадлежит сборке System.Web.Http .

Таким образом, в вашем проекте используются как MVC, так и Web Api, поэтому вы видите две строки для настройки IoC для каждого

DependencyResolver.SetResolver – это MVC-конструкция и требуется для поддержки IOC с использованием MVC.

GlobalConfiguration.Configuration.DependencyResolver является специфичным для WebApi.

Вам понадобятся только обе, если вы хотите поддерживать как MVC, так и WebApi в одном проекте.

Также может быть полезно указать, что вам обычно не нужно явно устанавливать DependencyResolver.SetResolver поскольку Ninject Mvc3 имеет загрузочный файл для этого … см. Здесь

  • Что означает «typedef void (* Something) ()» означает
  • Надежное определение количества элементов в массиве
  • C ++ шаблоны для производительности?
  • Как закрыть форму входа и показать основную форму без закрытия моего приложения?
  • Почему существуют орграфы в C и C ++?
  • Почему назначение целых чисел на естественно выровненной переменной атома на x86?
  • Разница между использованием указателей символов и массивов символов
  • Проверьте, содержит ли строка строку в C ++
  • Понимание контекста в C # 5 async / wait
  • Передача параметров командной строки с помощью Visual Studio C #
  • if (cin >> x) - Почему вы можете использовать это условие?
  • Давайте будем гением компьютера.