MVC3 DependencyResolver
- это прежде всего сервисный локатор.По сути, это любовник MVC и Common Service Locator ( commonservicelocator.codeplex.com ).Различия между локатором сервисов CSL и MVC3 DependencyResolver
заключаются в том, что архитекторы MVC решили, что им нужен более безопасный способ обработки случаев, когда сервисы не могут быть разрешены через него, и ответ, который они выбрали, заключался в том, что реализация IDependencyResolver
должна вернутьнуль в этих обстоятельствах.
В CSL-реализациях IServiceLocator стандартной практикой является выброс ActivationException
, который допускает стандартизированное исключение для обработки этих случаев.
При использовании MVC платформа будет вызывать DependencyResolver
попытаться решить настроенный сервис.Если он не может найти подходящий сервис, он использует значение по умолчанию.
Например, когда он хочет найти IControllerFactory
, он сначала проверит DependencyResolver
.Если там произойдет сбой, он будет использовать DefaultControllerFactory
, настроенный через ControllerBuilder.SetControllerFactory(...)
.Благодаря такому подходу проверки в первую очередь лучше вернуть значение null, а затем разрешить всплывающее исключение для конкретного контейнера.
Это означает, что на этом этапе вы должны перехватить / проглотить любое исключение, поскольку платформа MVC не несет ответственности засправиться с этим за вас (бремя должно быть на самом контейнере / IDependencyResolver
).
Вы можете записать это на этом этапе, но практика с MVC3 - возвращать ноль в этих случаях.