Я нахожусь в процессе обновления приложения ASP.NET MVC 2 до ASP.NET MVC 3. Одно из улучшений в версии 3, о котором я читал, - внедрение зависимостей и встроенный локатор служб.До сих пор я понимаю, что я могу удалить свое влияние на фабрику контроллеров и вместо этого реализовать интерфейс IDependencyResolver.Теперь все, что мне нужно сделать, это изменить следующее в моем методе Application_Start:
var container = new UnityContainer();
...
ServiceLocator.SetLocatorProvider(() => new UnityServiceLocator(container));
ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory(container));
на:
var container = new UnityContainer();
...
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
Пока все хорошо, но я видел отчеты, которые мне также нужныреализовать IControllerActivator.Примеры, которые я видел, просто показывают, как это использует средство определения зависимостей, поэтому я не могу понять, почему реализация по умолчанию не делает это автоматически.Если бы кто-то мог объяснить это, было бы здорово.Я предполагаю, что мне нужно реализовать этот интерфейс, чтобы получить инъекцию конструктора в мои контроллеры.Но как бы я внедрить зависимость внутри, скажем, фильтр действий.Раньше я бы сказал:
var authorizationService = ServiceLocator.Current.GetInstance<IAuthorizationService>();
Я знаю, что, возможно, смогу отключить это, чтобы использовать новый DependencyResolver, но я подумал, что с ASP.NET MVC 3 это позволит мне привести в порядок это иначе, я неЯ не понимаю, чем DependencyResolver отличается от ServiceLocator.
Буду признателен, если вы поможете прояснить некоторые из моих проблем, поскольку я хотел бы полностью понять кое-что, прежде чем приступить к осуществлению и реализовать его.
Спасибо