Общий сервисный локатор и реализации IDependencyResolver

Я строю библиотеку для разговорной обработки естественного языка. Во многих отношениях он действует так же, как MVC3 в том смысле, что он имеет контроллеры и методы действий. Он также использует внедрение зависимостей почти так же, как MVC3 при создании конструкторов для классов Controller. Основные отличия заключаются в том, что английское предложение заменяет как URL, так и значения формы HTTP; маршрутизация основана на подходящей структуре предложения; и переданные параметры являются значениями слов и фраз, используемых в английском предложении.

В настоящее время он использует Autofac для внедрения зависимостей, но я хотел бы удалить эту зависимость и позволить вызывающим абонентам использовать любой DI-контейнер.

Если я использую проект P & P / Codeplex Common Service Locator в своем решении, то вызывающие стороны все равно должны будут предоставить свои собственные реализации IServiceLocator против экземпляра этого интерфейса, выставленного моим движком. Если я использую IDependencyResolver из MVC3 вместо этого есть, по крайней мере, существующие реализации отображения из различных контейнеров DI в этот интерфейс.

Нужно ли мне:-

  1. используйте Common Service Locator и принудительно вызывайте абонентов для реализации классов отображения.
  2. использовать MVC 3 IDependencyResolver интерфейс, который уже имеет сопоставления с другими контейнерами.
  3. принять object как решатель зависимостей и введите его, чтобы получить один метод, который мне нужен, чтобы я мог использовать интерфейс MVC3, даже не принимая зависимость от ASP.NET MVC3.
  4. Другой?

1 ответ

Решение

Common Service Locator, по определению, представляет собой интерфейсную сборку, которая никогда не изменяется и не нуждается в конкретной версии.

Кроме того, все распространенные библиотеки IOC теперь имеют реализации для подключения к Common Service Locator.

Таким образом, вариант 1 является наилучшим вариантом, и риск его поломки в новой версии Common Service Locator практически равен нулю.

Спасибо Филипу Лауреано за помощь в ответе.

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