Ошибка при использовании DependencyResolver для создания экземпляра контроллера с MVC 3 - PullRequest
4 голосов
/ 16 ноября 2011

Я использую MVC 3 и использую следующий код при запуске приложения ...

UnityContainer container = new UnityContainer();

new UnityMappings(container);

DependencyResolver.SetResolver(new UnityServiceLocator(container));

Теперь, когда приложение запускается, я получаю следующую ошибку (но только иногда) ...

Произошла ошибка активации при попытке получить экземпляр типа IControllerFactory, ключ ""

Интересно, что если я продолжу веб-запрос, веб-сайт будет работать нормально.

Есть идеи?Я не вижу, что я делаю иначе, чем раньше, когда это работало нормально.

Приветствия, Ян.

Ответы [ 2 ]

6 голосов
/ 16 ноября 2011

MVC3 запрашивает намного больше, чем просто контроллеры от DependencyResolver. Для большинства из них MVC3 возвращается к реализации по умолчанию в случае, если DependencyResolver не возвращает экземпляр.

В вашем случае он запрашивает IControllerFactory, который неизвестен вашему контейнеру IoC, и выдает исключение, которое перехватывается реализацией UnityServiceLocator, и возвращается ноль. MVC затем возвращается к заводской настройке контроллера по умолчанию.

В отличие от других контейнеров IoC Unity не предоставляет необязательный TryResolve и, следовательно, не поддерживает надлежащую исключительную реализацию DependencyResolver.

0 голосов
/ 16 ноября 2011

Я бы предложил сначала просмотреть конфиг и убедиться, что там все правильно, а затем убедиться, что у меня есть все сборки, необходимые для Unity, на которые есть ссылки в проекте.Это сообщение об ошибке (по моему опыту) может указывать на ошибку в конфигурации или отсутствующую DLL, возможно, сборку, которую вы хотите загрузить в контейнер, или другую DLL, необходимую для DLL, загружаемой Unity?

Надеюсь, это поможет.

...