Недавно я попытался реализовать инъекцию зависимостей с помощью StructureMap. Мне удалось полностью следовать примеру, но я сталкиваюсь с созданным исключением каждый раз, когда я пытаюсь запустить приложение. Вот некоторые фрагменты кода моего контроллера factory.
public class StructureMapControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(Type controllerType)
{
if (controllerType == null)
throw new ArgumentNullException("controllerType");
return ObjectFactory.GetInstance(controllerType) as Controller;
}
}
My Global.asax вызывает статический класс BootStrapper, который регистрирует все мои зависимости, но похоже, что StructureMapControllerFactory GetControllerInstance вызывается дважды. В первый раз, когда он вызвал, передается правильный тип controllerType, но он всегда равен нулю во втором вызове.
При первом вызове GetControllerInstance тип устанавливается на HomeController, который является правильным. Код запускается в HomeController и возвращает View(). При возврате View() событие Page_Load вызывается в файле aspx. После этого он достигает строки:
httpHandler.ProcessRequest(HttpContext.Current);
То, что GetControllerInstance вызывается во второй раз.
Здесь мои биты Global.asax, которые могут иметь значение:
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
Bootstrapper.ConfigureStructureMap();
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory());
}
Я очень заинтересован в том, чтобы работать над инъекциями зависимости, и был бы очень благодарен, если кто-нибудь сможет мне помочь.:)