Почему на HomeController ссылаются и как мне его поддерживать (если я должен)?
Это своего рода Helleresque (Catch-22) ситуация; или, может быть, более уместно, "не хранилище, если я делаю, и не хранилище, если я не делаю"
С этим замком Windsor Controller Factory:
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IKernel _kernel;
public WindsorControllerFactory(IKernel kernel)
{
_kernel = kernel;
//According to http://docs.castleproject.org/Windsor.Typed-Factory-Facility.ashx, might need this:
//_kernel.AddFacility<TypedFactoryFacility>(); // This breaks ("Typed factory facility already registered"), so commenting it out; see http://stackru.com/questions/20914635/how-do-i-connect-the-various-pieces-of-my-web-api-castle-windsor-di-code
//but that requires uncommenting the "TypedFactory" using above.
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
}
return (IController)_kernel.Resolve(controllerType);
}
public override void ReleaseController(IController controller)
{
_kernel.ReleaseComponent(controller);
}
}
Если эта строка жива:
_kernel.AddFacility<TypedFactoryFacility>();
... я получаю это исключение во время выполнения: " TypedFactoryFacility" уже зарегистрирован в контейнере "
... Если я закомментирую эту строку, я получу следующее исключение:
" Не найдено ни одного компонента для поддержки службы HandheldServer.Controllers.HomeController "
... в этой строке:
return (IController)_kernel.Resolve(controllerType);
Почему на HomeController ссылаются и как мне его поддерживать (если я должен)?
HomeController - это класс по умолчанию, который выглядит следующим образом:
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Title = "Home Page";
return View();
}
}
Должен ли я избавиться от HomeController? Или же...???
ОБНОВИТЬ
Я изменил HomeController из этого:
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Title = "Home Page";
return View();
}
}
...к этому:
public class HomeController : ApiController
{
}
И теперь исключение времени выполнения я получаю здесь:
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null) // <-- now controllerType is null
{
throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
}
return (IController)_kernel.Resolve(controllerType);
}
... is: " Исключение System.Web.HttpException не было обработано кодом пользователя HResult=-2147467259 Сообщение = Не найден контроллер для пути '/'. Source=HandheldServer ErrorCode=-2147467259 WebEventCode=0 StackTrace: at HandheldServer.DIPlumbing С.MvcHandler.ProcessRequestInit(HttpContextBase, httpContext, IController& controller, IControllerFactory& factory) в System.Web.Mvc.MvcHandler.BeginProcessRequest(обратный вызов HttpContextBase httpContext, AsyncCallback., Состояние объекта) в System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest (контекст HttpContext, AsyncCall back cb, Object extraData) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () "
1 ответ
Проверьте, что ваша маршрутизация не ссылается на домашний контроллер.
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });