Настройка ASP.NET MVC ControllerFactory не имеет никакого эффекта - PullRequest
3 голосов
/ 10 февраля 2011

Я пытаюсь собрать свои контроллеры ASP.NET MVC2 с использованием StructureMap, но ASP.NET, похоже, не помнит, что я назвал ControllerBuilder.Current.SetControllerFactory в моем файле Global.asax.

В частности, я получаю сообщение об ошибке, что у моего контроллера нет конструктора без параметров. Трассировка стека показывает, что мой пользовательский ControllerFactory фактически никогда не выполнялся.

Вот мой вызов метода, который должен сообщить ASP.NET, какой ControllerFactory использовать:

Sub Application_Start()

    RegisterRoutes(RouteTable.Routes)

    ControllerBuilder.Current.SetControllerFactory(GetType(StructureMapControllerFactory))

    BootStrapper.RegisterDependencies()

End Sub

А вот и исключение, которое я получаю.

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
  System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck) +0
  System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache) +86
  System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache) +230
  System.Activator.CreateInstance(Type type, Boolean nonPublic) +67
  System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +80

Почему ASP.NET забывает, какой ControllerFactory использовать?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Как определяется ваш StructureMapControllerFactory?Есть ли у него конструктор по умолчанию?

Если нет, попробуйте использовать эту вторую перегрузку метода SetControllerFactory:

// First create the controllerFactory instance...

ControllerBuilder.Current.SetControllerFactory(controllerFactory);
0 голосов
/ 14 июня 2011

Вы должны установить свой контроллерFactory, прежде чем зарегистрироватьRoutes ...

...