Общий сервисный локатор и реализации IDependencyResolver
Я строю библиотеку для разговорной обработки естественного языка. Во многих отношениях он действует так же, как MVC3 в том смысле, что он имеет контроллеры и методы действий. Он также использует внедрение зависимостей почти так же, как MVC3 при создании конструкторов для классов Controller. Основные отличия заключаются в том, что английское предложение заменяет как URL, так и значения формы HTTP; маршрутизация основана на подходящей структуре предложения; и переданные параметры являются значениями слов и фраз, используемых в английском предложении.
В настоящее время он использует Autofac для внедрения зависимостей, но я хотел бы удалить эту зависимость и позволить вызывающим абонентам использовать любой DI-контейнер.
Если я использую проект P & P / Codeplex Common Service Locator в своем решении, то вызывающие стороны все равно должны будут предоставить свои собственные реализации IServiceLocator
против экземпляра этого интерфейса, выставленного моим движком. Если я использую IDependencyResolver
из MVC3 вместо этого есть, по крайней мере, существующие реализации отображения из различных контейнеров DI в этот интерфейс.
Нужно ли мне:-
- используйте Common Service Locator и принудительно вызывайте абонентов для реализации классов отображения.
- использовать MVC 3
IDependencyResolver
интерфейс, который уже имеет сопоставления с другими контейнерами. - принять
object
как решатель зависимостей и введите его, чтобы получить один метод, который мне нужен, чтобы я мог использовать интерфейс MVC3, даже не принимая зависимость от ASP.NET MVC3. - Другой?
1 ответ
Common Service Locator, по определению, представляет собой интерфейсную сборку, которая никогда не изменяется и не нуждается в конкретной версии.
Кроме того, все распространенные библиотеки IOC теперь имеют реализации для подключения к Common Service Locator.
Таким образом, вариант 1 является наилучшим вариантом, и риск его поломки в новой версии Common Service Locator практически равен нулю.
Спасибо Филипу Лауреано за помощь в ответе.