Что означает эта ошибка на заводском контроллере? - PullRequest
0 голосов
/ 13 января 2011

Я работал над моим первым веб-приложением MVC и с момента его запуска я получил это письмо, которое автоматически отправляется из моего метода Application_errror в global.asax

Это просто сообщение 404? Как это будет генерироваться? У меня нет контроллера с именем Text, у меня есть HomeController и AssistanceController ...

System.InvalidOperationException: The IControllerFactory 'FightTheFloods.Infrastructure.NinjectControllerFactory' did not return a controller for the name 'text'.
  at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
  at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
  at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
  at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
  at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
  at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
The IControllerFactory 'FightTheFloods.Infrastructure.NinjectControllerFactory' did not return a controller for the name 'text'.
  at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
  at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
  at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
  at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
  at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
  at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Вот мой фабричный код контроллера

public class NinjectControllerFactory : DefaultControllerFactory
    {
        private IKernel kernel = new StandardKernel(new FightTheFloodsServices());

        protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null)
                return null;
            return (IController)kernel.Get(controllerType);
        }


        /// <summary>
        /// Configuration for Ninject
        /// </summary>
        private class FightTheFloodsServices : NinjectModule
        {
            public override void Load()
            {
                Bind<IAssistanceManager>().To<AssistanceManager>();
                Bind<IAssistanceAlerter>().To<AssistanceAlerter>();
                Bind<ILocationHelper>().To<LocationHelper>();
                Bind<IUsersRepository>().To<UsersRepository>().WithConstructorArgument("connectionString", ConfigurationManager.
                                                                                                    ConnectionStrings[
                                                                                                        "AppDb"].
                                                                                                    ConnectionString);
                Bind<IAssistanceRequestRepository>().To<AssistanceRequestRepository>().WithConstructorArgument(
                    "connectionString", ConfigurationManager.
                                            ConnectionStrings[
                                                "AppDb"].
                                            ConnectionString);
            }
        }
    }

Ответы [ 2 ]

2 голосов
/ 13 января 2012

У меня возникла похожая проблема, к счастью, сообщения об ошибках были немного более полезны в моем случае:

"NinjectControllerFactory' did not return a controller for the name 'left_bg.gif'"
"NinjectControllerFactory' did not return a controller for the name 'Content'"

Единственная ссылка на left_bg.gif в моем приложении была в основной таблице стилей сайта. Он неправильно указывал на неправильную папку. Указание на правильную папку исправило эту ошибку.

Fiddler помог мне со второй ошибкой. «Содержимое» - это папка, которая содержит несколько подпапок («Изображения», «Сценарии» и т. Д.). Видимо, мой код ссылался на несуществующее изображение в папке "/ Content / Images /", которое вызывало 500 код ошибки в fiddler. Поэтому я удалил ссылку на это изображение, Fiddler сообщил, что проблема больше не возникает, и ошибка прекратилась.

Я могу продублировать это по желанию, поэтому я бы предложил использовать Fiddler, чтобы увидеть, есть ли у вас какие-либо ошибки при обновлении страницы, отследить эти ошибки и исключить их как причину. Если у вас есть папка или ресурс с именем «text» (как указано в сообщенной вами ошибке), возможно, NinjectControllerFactory жалуется на это, как и я.

0 голосов
/ 14 февраля 2011

У меня есть аналогичный GetControllerInstance, и я получаю различные проблемы.Иногда будет указано «Ошибка активации WorkflowController». Доступно более одного сопоставления.Путь активации: 1) Запрос на WorkflowController

Предложения: 1) Убедитесь, что вы определили привязку для WorkflowController только один раз.

Иногда он говорит, что какое-то значение не может быть нулевым ...иногда это будет успешно разрешить контроллер.

...