У меня есть приложение ASP.NET MVC 2 с настраиваемой фабрикой контроллеров StructureMap для обработки внедрения зависимостей для моих контроллеров:
public class StructureMapControllerFactory : DefaultControllerFactory
{
public override IController CreateController(RequestContext context, string controllerName)
{
Type controllerType = base.GetControllerType(context, controllerName);
return ObjectFactory.GetInstance(controllerType) as IController;
}
}
Я хотел бы знать, как я могу обрабатывать исключения в этой фабрике контроллеров, чтобычто они могут быть перенаправлены в ~ / Views / Shared / Error.aspx так же, как они находятся в контроллере с атрибутом HandleError.В настоящее время исключения не делают этого, несмотря на то, что для атрибута CustomErrors установлено значение «Вкл.»Маршрут по умолчанию:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
MVC соответствует этому маршруту и передает имя контроллера «DoesNotExist» на мою фабрику контроллеров.Затем GetControllerType возвращает значение null и вызывает исключение нулевой ссылки при вызове StructureMap.Затем я хотел бы иметь возможность обработать это исключение.
Обратите внимание, что добавление последующего перехвата всех маршрутов не решит эту проблему - MVC соответствует маршруту по умолчанию.
Я знаю, что могу решить эту проблемуОсобая проблема заключается в наложении ограничений на маршрут по умолчанию для контроллера, но более общий вопрос о том, как я могу использовать обычный MVC ~ / Views / Shared / Error.aspx на заводе.
Обратите внимание, что я неЧтобы получить ответ, требуется тесная связь фабрики контроллеров с конкретным приложением MVC.В идеале этот завод должен находиться в сборке, на которую ссылаются, а не в том же решении.